Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 以列表而不是字符串的形式打开.txt文件中的元素_Python_String - Fatal编程技术网

Python 以列表而不是字符串的形式打开.txt文件中的元素

Python 以列表而不是字符串的形式打开.txt文件中的元素,python,string,Python,String,我错误地将列表保存为.txt文件,现在当我打开它时,我的列表被认为是字符串,如下所示: mylist = ['[1,2,3,4,5]', '[4,47,6,7,3,9]',...] 有没有办法打开文件而不将列表作为字符串读取? 我尝试的是: my_new_list = [] for item in mylist: new_item = eval(item) my_new_list.append(new_item) 但是我得到了一个错误: 新项目=评估(项目) 文件“”,行未知

我错误地将列表保存为.txt文件,现在当我打开它时,我的列表被认为是字符串,如下所示:

mylist = ['[1,2,3,4,5]', '[4,47,6,7,3,9]',...]
有没有办法打开文件而不将列表作为字符串读取? 我尝试的是:

my_new_list = []
for item in mylist:
    new_item = eval(item)
    my_new_list.append(new_item)
但是我得到了一个错误: 新项目=评估(项目)

文件“”,行未知
SyntaxError:分析时出现意外的EOF

有没有一种方法可以在不将列表作为字符串读取的情况下打开我的文件(我希望避免再次运行程序并以其他方式保存文件)?谢谢

使用
ast.literal\u eval
json.load
将每个字符串转换为列表。避免使用
eval
,因为这可能会导致安全问题

使用
ast.literal\u eval

>>> import ast
>>> mylist = ['[1,2,3,4,5]', '[4,47,6,7,3,9]']
>>> [ast.literal_eval(e) for e in mylist]
[[1, 2, 3, 4, 5], [4, 47, 6, 7, 3, 9]]
使用
json.loads

>>> import json
>>> mylist = ['[1,2,3,4,5]', '[4,47,6,7,3,9]']
>>> [json.loads(e) for e in mylist]
[[1, 2, 3, 4, 5], [4, 47, 6, 7, 3, 9]]

你的代码对我来说很好。问题出现在文件末尾(EOF)。验证mylist的最后一个元素

mylist = ['[1,2,3,4,5]', '[4,47,6,7,3,9]']

my_new_list = []
for item in mylist:
    new_item = eval(item)
    my_new_list.append(new_item)
print (my_new_list)  

回答:[[1,2,3,4,5],[4,47,6,7,3,9]

不要使用
eval
,使用
ast.literal\u eval
你确定你所有的
项目都有效吗?但是没有,没有办法打开文本文件“作为列表”。@jornsharpe我用
ast.literal\u eval
尝试过,但我也有同样的问题。如何检查它们是否有效?如果我尝试打印列表中的元素,我没有问题,问题是我无法将它们附加到新列表中。这只是巧合——Python序列化并不总是与JSON相同。对于这个例子,我知道它会起作用。这就是我建议的原因,但你至少应该在回答中提到这一点。这是一个很大的警告,修正了!谢谢你的提醒!问题是,出于某种原因,最后一个元素是
'
mylist = ['[1,2,3,4,5]', '[4,47,6,7,3,9]']

my_new_list = []
for item in mylist:
    new_item = eval(item)
    my_new_list.append(new_item)
print (my_new_list)