在存储为数组的文本文件中搜索文本

时间:2017-04-25 14:22:33

标签: python python-3.x

我有一个文本文件,我的数据存储为数组;

示例:

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

中的值

2 个答案:

答案 0 :(得分:1)

我假设您的文本文件的每一行都包含JSON数据:

var canvas = LoadDrawing("...");
someContentControOnTheExistingPage.Content = canvas;
canvas.Arrange(new Rect(someContentControOnTheExistingPage.RenderSize));
canvas.Measure(someContentControOnTheExistingPage.RenderSize);
var bounds = VisualTreeHelper.GetDescendantBounds(canvas);
canvas.Width = bounds.Width;
canvas.Height = bounds.Height;

你得到:

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)

答案 1 :(得分: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)

这会将值加载为字典,然后您可以使用键调用该字典。从这里你可以创建一个复合词典(根据每行的键写入主词典),或者你可以随时搜索该值。

编辑以符合劳伦特答案的风格。