2013-03-24 100 views
4

所以我有一個很大的文本文件。它包含以下格式的一串信息:用Python從文本文件中提取數據

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

對不起。所有信息格式如上,在每個描述符之間是分隔符'|'。我希望能夠在自己的標籤中的每個描述符在文件中搜索「姓名」和打印像這樣的例子:

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

如果我仍然混亂,我希望能夠搜索名稱,然後打印出每個由'|'分隔的信息。

任何人都可以幫忙嗎?

編輯 這裏是文本文件的一部分的例子:

|特雷弗瓊斯| 70 | AST |白色|地球| 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

喜歡的東西

#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]) 

一個字的警告,這種解決方案假定名稱是唯一的,如果他們不是更復雜的解決方案可能是必需的。

+0

您可以擴展我如何使用'to_search [NAME]'進行搜索嗎? – user1985351 2013-03-24 01:11:13

+0

代碼'to_search [NAME]'其中NAME是一個名字(作爲一個字符串)會給你所有與該名字相關的數據。 – jhoyla 2013-03-24 01:15:10

+0

我試圖實現你的代碼,它提出了一個keyerror說:「KeyError:'名稱'」。不太確定我做錯了什麼。 – user1985351 2013-03-24 01:24:49

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