0

我收到了一个由 py​​thon 中的 json 转储生成的文本文件,如下所示:

[0.1,0.1,0.2,0.3]
[0.1,0.3,0.4,0.3]
[0.1,0.1,0.3,0.3]
[0.3,0.1,0.5,0.3]
.
.
.
[0.1,0.1,0.3,0.3]
[0.3,0.4,0.6,0.3]

等等相当多的行〜> 10,000,000

我想找出从文件中读取并将它们实际转换为列表的最快/最有效的方法。

我有一个带有 for 循环的程序,该循环使用列表运行特定操作:

for x in range(filelength):
    for y in list(each line from the file):
        use the numbers from each list to perform certain operations

我正在考虑从文本文件中解析出所有括号,并将每个值逗号分隔为每一行的空白列表(这可能会很慢且耗时),但我认为 python 可能有一个功能可以转换将表示为字符串的列表轻松快速地转换为 python 中的实际列表。

任何想法或建议将不胜感激。

4

2 回答 2

6

用于ast.literal_eval()将每一行解析回 Python 列表:

import ast

with open(filename, 'r') as fh:
    for line in fh:
        listobj = ast.literal_eval(line)

ast.literal_eval()接受一个字符串并将其解释为 Python 文字值;直接支持列表和浮点值:

>>> ast.literal_eval('[0.1,0.1,0.2,0.3]\n')
[0.1, 0.1, 0.2, 0.3]
于 2013-09-17T21:13:47.893 回答
1

您说这是“由 json 转储生成”,并且每一行看起来都像有效的 JSON,所以正确的做法是将每一行解析为 JSON:

import json
with open(filename) as f:
    the_lists = map(json.loads, f)

由于您只想直接遍历列表,因此loads在循环中执行正确的操作可能更简单:

import json
with open(filename) as f:
    for line in f:
        for column in json.loads(line):
            # your code here
于 2013-09-17T21:33:13.757 回答