使用Python从文本文件中提取数据
我有一个很大的文本文件,里面有很多信息,格式是这样的:
|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')