我有一个巨大的文本文件,我必须解析。
该文件的各行包含一些文本和字典。我只关心字典数据。
文件包含以下格式的日志
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的最佳方法是什么。
答案 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}