如何使用python从大文本文件中搜索dict

时间:2015-08-21 18:32:37

标签: python dictionary

我有一个巨大的文本文件,我必须解析。

该文件的各行包含一些文本和字典。我只关心字典数据。

文件包含以下格式的日志

my data : {"a":1, "b":2, "c": 3}
my data : {"a":23, "b": 44, "c": 565}
my_data : {"a":1233, "b": 21, "c":544}

所以,从上面的数据来看,我只是在找dict。

我试过

f = open(‘text.file’,'r’)
my_dict = eval(f.read())

但它给了我错误,因为该行的初始部分是字符串。 所以,我的问题是从文件中提取dict的最佳方法是什么。

3 个答案:

答案 0 :(得分:1)

看起来你在字符串之间有一些熟食店,所以str.split()就是你的朋友。

然后,考虑使用AST模块而不是eval。与盲目评估相比,它所带来的安全风险更小。

>>>import ast
>>> a = ast.literal_eval("{'a':1}")
>>> type(a)
<class 'dict'>
>>> a
{'a': 1}

答案 1 :(得分:1)

eval是bad

这就是我要做的事情:

import json

dicts = []
with open('text.file', 'r') as f:
    for line in f.readlines():
        if not line: continue
        _, dict_str = line.split(':', 1)
        dict_str = dict_str.strip()
        dict = json.load(dict_str)
        dicts.append(dict)

答案 2 :(得分:1)

您可以使用re模块

import re
text = """my data : {"a":1, "b":2, "c": 3}
          my data : {"a":23, "b": 44, "c": 565}
          my_data : {"a":1233, "b": 21, "c":544}"""
dict = re.compile(r"{[^}]*?}", re.I)
matches = dict.finditer(text)
for match in matches:
    my_dict = eval(match.group())
    print(my_dict) 

给你

{'b': 2, 'c': 3, 'a': 1}
{'b': 44, 'c': 565, 'a': 23}
{'b': 21, 'c': 544, 'a': 1233}