Python - 如何将文本文件中的列行直接读入python中的列表

时间:2013-09-17 21:12:59

标签: python json list file-io dump

我收到了一个由python中的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中的实际列表。

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

2 个答案:

答案 0 :(得分:4)

使用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]

答案 1 :(得分: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