2014-11-12 5 views
-2

이 항목으로 시작하는 줄을 추출하고 새 파일을 작성하려고합니다.파이썬에서 텍스트 줄 추출하기

def ReadFileContents(): 
    file_content = open('Testing.pdb') 
    all_file_content = file_content.readlines() 
    list3 = [] 
    for line in all_file_content: 
     if line.startswith('TER'):`enter code here` 
      list3.append(line) 
      if line.startswith('HETATM'): 
       list3.apped(line) 
       if line.startswith('CONECT'): 
        list3.append(line) 
        if line.startswith('MASTER'): 
         list3.append(line) 
         if line.startswith('END'): 
          list3.append(line) 
      file = open('list3.txt', 'w') 
      for line in list3: 
       file.write(line + '\n') 
      file.close() 

ReadFileContents()

에만 문제가 TER로 시작하는 라인과 list3.txt 파일을 생성한다는 것입니다 :이 내가 가진 것입니다. 어떤 아이디어?

감사, 행의 시작 부분에서 페드로

+0

TER로 시작하는 행만 일치하기 때문에 :)'line.startswith ('TER') '의 내부 조건은 터무니 없습니다. – Nemoden

답변

1

공백 파이썬 코드 블록 레벨을 나타낸다. 조건이 True 경우

if A: 
    #do something 
    if B: 
     #do another thing 

another thing 만 수행됩니다 : 당신은 다음과 같은 코드가 있다고 가정 .

def ReadFileContents(): 
    file_content = open('Testing.pdb') 
    all_file_content = file_content.readlines() 
    list3 = [] 
    for line in all_file_content: 
     if line.startswith('TER'): 
      list3.append(line) 
     if line.startswith('HETATM'): 
      list3.apped(line) 
     if line.startswith('CONECT'): 
      list3.append(line) 
     if line.startswith('MASTER'): 
      list3.append(line) 
     if line.startswith('END'): 
      list3.append(line) 
    file = open('list3.txt', 'w') 
    for line in list3: 
     file.write(line + '\n') 
    file.close() 
+0

PS @Vishnu Upadayay가'elif '를 사용하는 충고는 하나의'if' 문을 사용하는 것보다 낫습니다. 조건 실행 작업이 적기 때문입니다. 코드에있는 문제의 본질을 설명했습니다. 비슈누 (Vishnu)의 대답은 실제 프로그램에서 받아 들여 져야한다. elif-statements 때문 만이 아니라 'with'문을 악용하기 때문에 또한 좋은 연습입니다. – Nemoden

1

당신은 더 나은 elif보다는 nested if 사용 .And는 항상 context managerwith이 파일을 열 수 및 수동 close에 파일을하지 않아도 사용하는 것이 좋습니다.

변경이 -이에

file_content = open('Testing.pdb') 
all_file_content = file_content.readlines() 

: -

with open('Testing.pdb') as file_content: 

그런 다음 전체 코드는 다음과 같습니다 -

def ReadFileContents(): 
    list3 = [] 
    with open('Testing.pdb') as file_content: # Use `with`. 
     for line in file_content.readlines():  
      if line.startswith('TER'): 
       list3.append(line) 
      elif line.startswith('HETATM'): 
       list3.append(line) 
      elif line.startswith('CONECT'): 
       list3.append(line) 
      elif line.startswith('MASTER'): 
       list3.append(line) 
      elif line.startswith('END'): 
       list3.append(line) 
    with open('list3.txt', 'w') as f: 
     for line in list3: 
      f.write(line + '\n') 

     #Read the file 
     f.seek(0) 
     print f.read() 

ReadFileContents() 
+0

@pedro 업데이트 된 코드를 확인하십시오. –

0
import re 
def ReadFileContents(): 
file_content = open('Testing.pdb') 
all_file_content = file_content.readlines() 
list3 = [] 
for line in all_file_content: 
     m=re.match(r"^(?:TER|HETATM|CONECT|MASTER|END).*$,line) 
     if m: 
      list3.append(m.group()) 





file = open('list3.txt', 'w') 
for line in list3: 
     file.write(line + '\n') 
file.close() 

당신은 re를 사용하면 무엇을 얻을 수 있습니다 그것도 확장 성이 있습니다.