2013-05-07 3 views
-2

은 내가 많은 정보를 TXT 파일을 가지고,하지만 난 단지 다음과 같이 시작하는 사람을 원한다 :python에서 regex를 사용하여 텍스트 파일에서 데이터를 가져 오는 방법은 무엇입니까?

1. #BEGIN_DRUGCARD DB00001 

2. # Generic_Name: 
Lepirudin 

내가 DB00001로 시작 무엇인지 첫 번째 경우에 싶어. 두 번째 경우에는 두 번째 줄에 무엇이 있는지, 둘 다 텍스트 파일에 저장하십시오.

나는 다음과 같은 스크립트를 가지고 있지만, 그것은 작동하지 않습니다, 나는 다음과 같은 오류 얻을 : 라인 22 "/ 홈/VIKI/작업/prbb/drugnames을" 파일 :

역 추적 (마지막으로 가장 최근에 전화를) , 에서 drug_id = line() TypeError : 'str'개체를 호출 할 수 없습니다. 아이디어가 있습니까?

import re  

regex1 = '#BEGIN_DRUGCARD ' 
regex2 = '# Generic_Name:' 

x=y=0 

e = open ('drugbank.txt', 'r') 
f = open ('Drug_output.txt', 'w') 

for line in e.readlines(): 

    if re.match(regex1, line): 
     y=1 
     continue 

    elif re.match(regex2, line): 
     x=1 
     continue 

if y==1: 
    drug_id = line() 

if x==1: 
    generic_name = line.split() 

f.write('drug_id') 
f.write('\n\n') 
f.write('generic_name') 
+0

나는 당신의 identations의 일부를 고정,하지만 당신이 정말로해야 구문 및/또는 구조를 살펴보십시오. – Torxed

+0

"잘 작동하지 않습니다"? 직면 한 정확한 문제를 알려주십시오. – Dogbert

+0

Traceback (가장 최근의 마지막 호출) : 줄 22, 에있는 "/ home/viki/workspace/prbb/drugnames"파일 drug_id = line() TypeError : 'str'개체를 호출 할 수 없습니다. – Viki

답변

1

line()는 "함수는 line라는 이름의 호출"을 의미하고, line 문자열이기 때문에 물론이 작동하지 않을 수 있습니다.

그러나 코드에는 몇 가지 다른 문제가 있습니다. drugbank.txt 파일의 마지막 일치 항목은 파일에 무엇인가 쓰기 전에 이전의 모든 사례를 덮어 쓰며, 뭔가 쓸 때 변수 drug_id 대신에 drug_id 텍스트를 쓰고 있기 때문에 마지막 일치 항목 만 찾습니다. 또한 split()을 잘못 사용하고 있습니다. 파이썬 튜토리얼을 읽었습니까?

당신의 drugbank.txt 여러 약물을 포함하고 있다고 가정하면, 각 약물의 ID 및 일반 이름은 항상 서로를 따르는 것이,이 같은 작업을 할 수있는 :

import re  
regex = r'#BEGIN_DRUGCARD\s*(.*)\s*# Generic_Name:\s*(.*)' 

with open ('drugbank.txt', 'r') as infile: 
    drugs = infile.read() 
    results = re.findall(regex,drugs) 

with open('Drug_output.txt', 'w') as outfile: 
    for match in results: 
     outfile.write(match[0] + "\n" + match[1] + "\n\n") 
+0

빠른 응답을 보내 주셔서 감사합니다. 나는 초보자이며, 잠시 동안이 대본에 어려움을 겪고있었습니다. 귀하의 스크립트를 시도했지만 오류 메시지가 나타나지 않지만 출력 파일이 비어 있습니다. – Viki

관련 문제