다음과 같은 약 1000 줄의 데이터가있는 텍스트 파일에서 입력을 읽으려고합니다.
SMSfrom+447919311433to+408640236167
Phonecallfrom+652578614377to+173972991459
원하는 출력 :
+447919311433
텍스트 파일에서 모든 영국 전화 번호를 가져오고 파일에서 +44 문자열을 검색 한 후 10 개의 문자를 가져 오려고합니다. python 2.7.5를 사용하고 있습니다. 도와주세요.
A를 txt
호출 된 파일 log.txt
내용 :
SMSfrom+447919311433to+408640236167
Phonecallfrom+652578614377to+173972991459
다음을 사용하여 file
읽을 수 있습니다 .
open("log.txt", "r")
그런 다음 파일의 loop
각각 line
을 통해 원하는 데이터를 추출 할 수 있습니다.
regular expression
해결책:A로부터 데이터를 추출하려면 line
, 우리는 사용할 수 있습니다 regular expression
. 이전에 이러한 것을 본 적이 없다면 다른 특수 문자로 구성된를 string
사용하여 데이터를 추출하는 방법입니다 pattern
.
2
영국 전화 번호를 한 줄로 픽업 할 수 있도록이 re.findall
기능을 사용합니다 . pattern
모든 영국 전화 번호를 받기 위해 다음 을 만들었습니다 .
\+44\d{10}
그것은 검색하여 작동 string
'+44'
도피와 '\'
상의 '+'
특수 문자, 다음 복용 10
digits
과 그 후 \d{10}
합니다 ( \d
수단 숫자와 {10}
수단 10
중을).
그런 다음 이것을 expression
안에 넣어서 loop
각 전화 번호를 list
. re.findall
목록 도 반환하므로 . lists
대신 이들을 연결해야합니다 appending
. '+'
피연산자 (또는 간단히 +=
) 로이를 수행합니다 .
에서 모든 영국 전화 번호를 픽업 할 코드 만들기 file
:
import re
numbers = []
with open("log.txt", "r") as f:
for line in f:
numbers += re.findall("\+44\d{10}", line)
질문의 귀하의 2
회선 file
에 대해 하나의 전화 번호 만 제공합니다 numbers
.
['+447919311433']
if-statement
해결책:이 솔루션은 영국에서 온 경우 두 번째 영국 전화 번호를 픽업하지 않고 Nick이 지적한 영국 번호로 index()
첫 번째 발생 만 반환합니다.
라인에서 데이터를 추출하려면, 우리는 먼저 테스트해야합니다 : 에 이 경우, 우리가 찾고 싶어요,하고 의를 에 와 추가 그 후 문자 A를 숫자 (참고 그 방법 의 인덱스 시작 하므로 색인 뒤에 ( + for ) 문자를 가져와야합니다).if
string
'+44'
line
index
'+44'
line
10
index
list
.index()
returns
string
13
10
3
'+44'
이에 대한 코드는 다음과 같습니다.
numbers = []
with open("log.txt", "r") as f:
for line in f:
if '+44' in line:
start = line.index('+44')
numbers.append(line[start:start+13])
목록에 추가됩니다 : numbers
, 내용으로 완료됩니다.
['+447919311433']
분명히, 1000
줄이 그어진 txt
파일 을 사용했다면 이것은 list
훨씬 더 길어질 것입니다!
도움이 되었기를 바랍니다!
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다