如何在python中使用正则表达式从文本文件中获取数据?

时间:2013-05-07 10:43:40

标签: python regex

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

1. #BEGIN_DRUGCARD DB00001

2. # Generic_Name:
Lepirudin

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

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

追踪(最近一次通话):   文件“/ home / viki / workspace / prbb / drugnames”,第22行,in     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')

1 个答案:

答案 0 :(得分:1)

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")