-2

我有一个 txt 文件,其中有很多信息,但我只想要这样开头的文件:

1. #BEGIN_DRUGCARD DB00001

2. # Generic_Name:
Lepirudin

我想在第一种情况下以 DB00001 开头。在第二种情况下,第二行中的内容,然后将它们都保存到文本文件中。

我有以下脚本,但它不起作用,我收到以下错误:

回溯(最后一次调用):文件“/home/viki/workspace/prbb/drugnames”,第 22 行,在 drug_id = line() 类型错误:'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')
4

1 回答 1

2

line()意思是“调用名为line”的函数,当然这是行不通的,因为line它是一个字符串。

但是您的代码也存在其他几个问题。它只会在您的drugbank.txt文件中找到最后一个匹配项,因为它会在将任何内容写入文件之前覆盖所有先前的情况,并且在写入内容时,它会写入文本drug_id而不是变量的内容drug_id)。另外,你用split()错了。你读过 Python 教程吗?

假设您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")
于 2013-05-07T11:01:29.173 回答