使用Python从文本文件中提取数据

4 投票
2 回答
3350 浏览
提问于 2025-04-17 20:06

我有一个很大的文本文件,里面有很多信息,格式是这样的:

|NAME|NUMBER(1)|AST|TYPE(0)|TYPE|NUMBER(2)||NUMBER(3)|NUMBER(4)|DESCRIPTION|

抱歉说得不够清楚。所有信息的格式都像上面那样,每个描述之间用'|'这个符号分隔。我想要能在文件里搜索'NAME',然后把每个描述单独打印出来,像这个例子:

Name
Number(1):
AST:
TYPE(0):
etc....

如果我还是让你困惑了,我的意思是我想搜索名字,然后把后面的信息打印出来,每个信息之间用'|'分隔。

有没有人能帮我?

补充一下,这里是文本文件的一部分示例:

|Trevor Jones|70|AST|White|Earth|3||500|1500|住在养老院的老爷爷|

这是我目前写的代码:

 with open('LARGE.TXT') as fd:
    name='Trevor Jones'
    input=[x.split('|') for x in fd.readlines()]
    to_search={x[0]:x for x in input}
    print('\n'.join(to_search[name]))

2 个回答

2

像这样

#Opens the file in a 'safe' manner
with open('large_text_file') as fd:
    #This reads in the file and splits it into tokens, 
    #the strip removes the extra pipes  
    input = [x.strip('|').split('|') for x in fd.readlines()]
    #This makes it into a searchable dictionary
    to_search = {x[0]:x for x in input}

然后用这个来搜索

to_search[NAME]

根据你想要的答案格式,可以使用

print ' '.join(to_search[NAME])

或者

print '\n'.join(to_search[NAME])

需要注意的是,这个方法假设名字是唯一的,如果不是,可能需要更复杂的解决方案。

2

首先,你需要以某种方式把文件拆分开。我觉得使用字典是最好的选择。这样你就可以获取你需要的内容了。

d = {}
# Where `fl` is our file object
for L in fl:
    # Skip the first pipe
    detached = L[1:].split('|')
    # May wish to process here
    d[detached[0]] = detached[1:]
# Can do whatever with this information now
print d.get('string_to_search')

撰写回答