我无法用Python解决这个问题。
我正在尝试通过读取文件来获取列表(例如.xml或.txt)。
我已将我的列表放在我的文件中的大列表中:
[[48,49,39,7,13,1,11],[46,27,19,15,24,8,4],[35,5,41,10,31,5,9],[12,9,22,2,36,9,2],[50,47,25,6,42,3,1]]
现在我正在寻找代码来获取像列表一样的大列表,而不是字符串。实际上,我已经尝试了open(),write()和read()函数的一些代码部分。但是Python回复了我:
'[[48,49,39,7,13,1,11],[46,27,19,15,24,8,4],[35,5,41,10,31,5,9],[12,9,22,2,36,9,2],[50,47,25,6,42,3,1]]'
它不是一个列表,只是一个字符串。所以我不能使用list的函数来修改它。
感谢那些将回答我的问题的人
答案 0 :(得分:7)
好吧,一个简单的方法是将其解析为json字符串:
>>> import json
>>> l_str = '[[48,49,39,7,13,1,11],[46,27,19,15,24,8,4],[35,5,41,10,31,5,9],[12,9,22,2,36,9,2],[50,47,25,6,42,3,1]]'
>>> l = json.loads(l_str)
>>> print l
[[48, 49, 39, 7, 13, 1, 11], [46, 27, 19, 15, 24, 8, 4], [35, 5, 41, 10, 31, 5, 9], [12, 9, 22, 2, 36, 9, 2], [50, 47, 25, 6, 42, 3, 1]]
如果您要加载仅包含该字符串的文件,您只需使用以下内容执行此操作:
>>> import json
>>> with open('myfile') as f:
>>> l = json.load(f)
>>> print l
[[48, 49, 39, 7, 13, 1, 11], [46, 27, 19, 15, 24, 8, 4], [35, 5, 41, 10, 31, 5, 9], [12, 9, 22, 2, 36, 9, 2], [50, 47, 25, 6, 42, 3, 1]]
但是如果您想要的是序列化python 对象,那么您应该使用在该任务中更强大的pickle
......
当然,还有其他方式可以让其他人通过类似eval()
的函数来解析你的字符串,但我强烈建议你反对,因为这很危险,导致代码不安全。 编辑:在阅读@kamikai回答后,我发现ast.literal_eval()
看起来也是一个不错的选择,json.loads()
is more efficient。
答案 1 :(得分:1)
如果您的示例真实代表您的数据(即,您的文本文件仅包含整数列表的列表),则可以将其解析为JSON:
import json
data = read_the_contents_of_the_file()
decoded = json.loads(data)
将data = read_the_contents_of_the_file()
替换为现有代码,以便将内容读取为字符串。
答案 2 :(得分:1)
正如here,所见,内置的ast
模块可能是您最好的选择,假设文本仍然是有效的python。
import ast
ast.literal_eval("[[1,2,3], [4,5,6], [7,8,9]]") # Returns nested lists
答案 3 :(得分:0)
使用json加载和解析文件:
import json
with open(my_file_path, "rb") as f:
my_list = json.load(my_file_path)