2015-10-26 43 views
2

我的txt文件看起来是这样的:的Python阅读txt文件到号码清单列表

[[1,3,5],[1,4,4]] 
[[1,4,7],[1,4,8],[2,4,5]] 

我试图把它转换成一个列表,其中包括在TXT文件中的所有列表。因此,对于我的例子中所需要的输出将是:

[[[1,3,5],[1,4,4]], [[1,4,7],[1,4,8],[2,4,5]]] 

这似乎是一件容易的事,但我只能得到这样的:

['[[1,3,5],[1,4,4]]', '[[1,4,7],[1,4,8],[2,4,5]]'] 

有没有一种简单的方法将字符串类型转换成一个列表?


的代码我使用:

input_list = [] 
with open("./the_file.txt", 'r') as f: 
    lines = f.read().split('\n') 
    for each_line in lines: 
     input_list.append(each_line) 

f.close() 
+0

'开放的( “./ the_file.txt”,“R ')as f:answer = [ast.literal_eval(line.strip())for line in f]' – inspectorG4dget

+0

您是否希望列表项被表示为整数或字符串? –

+0

@JohnGordon整数。对不起,我没有说清楚。谢谢。 – datadatadata

回答

2

你真的想评估你的文件中的每一行为实际的Python代码。但是,这样做可能会产生问题(例如:如果一行说import os; os.system('rm -rf /')会发生什么情况)。

So you don't want to use something like eval

相反,你可能会考虑使用ast.literal_eval,其中有对这种行为的几个保障:

with open("./the_file.txt", 'r') as f: 
    answer = [ast.literal_eval(line.strip()) for line in f] 
1

这可以在一个行完成与ast.literal_eval和列表理解:

from ast import literal_eval 

input_list = [literal_eval(line) for line in open("./the_file.txt", 'r') ] 
+0

你用'ast.literal_eval'更安全,它可以防止你意外地炸毁你的电脑,例如 – inspectorG4dget

+0

谢谢,修改我的代码。 –

0

如果您在文本文件中的行是格式正确,你可以使用eval

input_list.append(eval(each_line))