我收到了一个由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中的实际列表。
任何想法或建议都将不胜感激。
答案 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