将数字数据(保存在文本文件中)读入python的正确方法是什么?

时间:2018-06-16 06:39:00

标签: python python-2.7 text-files readline

我有一些需要保存以进行进一步处理的补丁坐标信息。我将坐标(列表)保存到文件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的最佳方法是什么?

1 个答案:

答案 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]]
>>>