2017-04-25 139 views
0

我有一個文本文件,其中的數據以數組形式存儲;搜索存儲爲數組的文本文件中的文本

例子:

{'id': '1', 'name': 'a', 'color': 'red'} 
{'id': '2', 'name': 'b', 'color': 'blue'} 
{'id': '3', 'name': 'c', 'color': 'yellow'} 
{'id': '4', 'name': 'd', 'color': 'purple'} 

我要搜索特定的值,在這個文本文件並打印出整個匹配行信息。例如,我想搜索顏色是紫色的地方,我想打印出整行。

我試圖使用nmap,但它沒有幫助。

f = open('dbtest.txt') 
s = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ) 
if s.find('purple') != -1: 
    print 'I_DK_HOW_TO_PRINT_THIS_LINE' 

有誰能告訴我這樣做的最簡單方法嗎?

編輯:當我選擇搜索基礎上的名字,我只希望在'name'

回答

1

我做你的文本文件的每一行包含JSON數據asumption:

import textwrap # to have indented string here... 

content = textwrap.dedent("""\ 
{'id': '1', 'name': 'a', 'color': 'red'} 
{'id': '2', 'name': 'b', 'color': 'blue'} 
{'id': '3', 'name': 'c', 'color': 'yellow'} 
{'id': '4', 'name': 'd', 'color': 'purple'} 
""") 

import io 
import json 

with io.StringIO(content) as f: 
    for line in f: 
     # JSON parser don't support simple quoted-strings 
     line = line.replace("'", '"') 
     data = json.loads(line) 
     if 'color' in data and data['color'] == 'purple': 
      print(data) 

你得到:

{'name': 'd', 'color': 'purple', 'id': '4'} 

對於經典的文件,你可以這樣寫:

with open('dbtest.txt') as f: 
    for line in f: 
     line = line.replace("'", '"') 
     data = json.loads(line) 
     if 'color' in data and data['color'] == 'purple': 
      print(data) 

您還可以將您的「記錄」存儲在列表中供將來使用:

records = [] 
with open('dbtest.txt') as f: 
    for line in f: 
     line = line.replace("'", '"') 
     records.append(json.loads(line)) 

selection = [record for record in records 
      if 'color' in record and record['color'] == 'purple'] 

print(selection) 

你得到:

[{'name': 'd', 'color': 'purple', 'id': '4'}] 
+0

這是一個神奇的解決方案。謝謝! –

0
with open("hello.txt", 'r') as input_file: 
    for row in input_file: 
     dict_this_row = (eval(row)) 
     if dict_this_row["color"] == 'purple' and "color" in dict_this_row: 
      print(dict_this_row) 

這會將值作爲一個字典,然後可以用鍵調用搜索值。從這裏,您可以創建複合詞典(根據每行的鍵寫入主詞典),也可以隨時搜索該值。

編輯,以配合洛朗的答案的風格。