通过Python读取文件获取列表

时间:2014-02-22 11:31:43

标签: python list file get

我无法用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的函数来修改它。

感谢那些将回答我的问题的人

4 个答案:

答案 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)