我有一个文本文件,我的数据存储为数组;
示例:
{'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'
答案 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)
这会将值加载为字典,然后您可以使用键调用该字典。从这里你可以创建一个复合词典(根据每行的键写入主词典),或者你可以随时搜索该值。
编辑以符合劳伦特答案的风格。