2014-02-28 3 views
0

저는 포럼 규칙을 위반할 경우이 포럼을 처음 접하고 프로그래밍하고 사과 할 것입니다. 이 광범위하게 연구했지만 내 문제에 대한 해결책을 찾을 수 없습니다. 그래서Python에서 regex를 사용하여 행을 찾아서 복사하십시오.

나는이 일반적인 구조가 매우 긴 파일이 : 나는 모든 행을 찾기 위해 정규 표현식을 사용하려고 지금

with open("C:\blablabla\text.txt", 'r+') as infile: 
data = infile.read() 

사용하여 파일을 가져

data=""" 
    20.020001 563410 9 
    20.520001 577410 20 
    21.022001 591466 9 
    21.522001 605466 120 
    23.196001 652338 2 
    25.278001 710634 7 
    25.780001 724690 144 
    26.280001 738690 9 
    26.782001 752746 40 
    27.282001 766746 9 
    27.784001 780802 140 
    29.372001 825266 2 
    31.458001 883674 7 
    31.958002 897674 8 
    32.458002 911674 9 
    32.958002 925674 10 

""" 

그 (146)를 통해 140로 끝나는, 그래서 이런 짓을 :

items=re.findall('.......................14[0-6]\n',data,re.MULTILINE) 
for x in items: 
    print x 

이, 작동하지만 지금은 t을하려고 할 때

if items in data: 
TypeError: 'in <string>' requires string as left operand, not list 

나는 문제가 무엇인지 이해하지만, 나는 그것을 해결하는 방법을 몰라 : o 정규 표현식을 포함하는 라인,

for x in items: 
    if items in data: 
     data.write(items) 

나는 다음과 같은 오류가 복사합니다. 정규 표현식의 결과가리스트 일 때 왼쪽 피연산자에 문자열을 어떻게 공급할 수 있습니까?

은 어떤 도움이 많이 감사합니다!

+0

고정 포맷의 경우're'보다'split'을 선택하는 것이 좋은 해결책입니다 - 예. 'line.split()'는 라인을 분리 된 숫자로 나눕니다. 마지막 항목'line.split() [- 1]'이 예상 범위 내에 있는지 간단히 확인할 수 있습니다. – l4mpi

+0

'데이터 항목이 있다면 :'을 왜 확인하고 있습니까? 데이터에서'items'를 추출하지 않았습니까? –

+0

또한'csv' 모듈을 확인하십시오. 구문 분석을 좀 더 쉽게 할 수 있습니다. –

답변

0

당신은 단순히 개별적으로 각 라인을 처리해야

data = infile.readlines() 
for line in data: 
    if re.match('.......................14[0-6]\n', line): 
     print line[:-1] 

라인의 마지막 문자는 print 문을 포함하는 하나 중복 될 뒤에 줄 바꿈이다.

0

당신은 라인으로 파일 라인을 읽을 수 있습니다

귀하의 정규식 간단하게 할 수
data="" 
with open("file.txt", 'r+') as infile: 
    for line in infile: 
     if (146 >= int(line.split()[-1]) >= 140) : 
      data = data + line 

print data 
0

추가하여 더 문제를 극복하기 위해

re.findall('.*?14[0-6]\n') 

공백으로 구분 된 텍스트 블록에 대한

items = re.findall('.*?14[0-6]\n',data) 
result="""""" 
for x in items: 
    result+=str(x) 
print result