我有一些需要保存以进行进一步处理的补丁坐标信息。我将坐标(列表)保存到文件patch_info.txt
中,对于一个文件,数据就像这样,我将每个mat文件的for循环中的信息附加到文本文件中:
[[117, 90, 75, 102, 105, 132],
[117, 83, 68, 102, 98, 132],
[117, 82, 67, 102, 97, 132],
[116, 73, 58, 101, 88, 131],
[115, 67, 52, 100, 82, 130],
[112, 129, 114, 97, 144, 127],
[110, 97, 82, 95, 112, 125],
[109, 55, 40, 94, 70, 124],
[102, 93, 78, 87, 108, 117],
[99, 134, 119, 84, 149, 114],
[96, 117, 102, 81, 132, 111],
[96, 72, 57, 81, 87, 111],
[82, 126, 111, 67, 141, 97],
[78, 110, 95, 63, 125, 93]],
'labels-001-012.mat']
我使用以下代码再次将它们读入python:
patch_info=[]
with open('patch_info.txt') as f:
for line in f.readlines():
line=line.strip('\n')
patch_info.append(ast.literal_eval(line))
我的问题是有些用户不建议使用ast.literal_eval
,将数据的数字列表读入python的最佳方法是什么?
答案 0 :(得分:1)
如果您可以将textfile中的数据格式化为json数据,那么可以使用json.load
来解析数据。这比使用ast.literal_eval
要好得多
如果您的数据尚未格式化,您可以使用sed
/ awk
或类似的东西进行一些预处理,将其转换为所需的json格式
例如,请考虑名为test.data
的文件中的以下数据[
[1,2],
[6,7],
[1,2],
[6,7],
[1,2],
[6,7],
[1,2],
[6,7],
[1,2],
[6,7]
]
然后你可以通过
在python中加载它们>>> with open('test.data2', 'r') as f:
... data = json.load(f)
...
>>> data
[[1, 2], [6, 7], [1, 2], [6, 7], [1, 2], [6, 7], [1, 2], [6, 7], [1, 2], [6, 7]]
>>>