从文本文件读取列表元组作为元组,而不是字符串 - Python
我有一个文本文件,里面有很多行,每行都是一个元组。每个元组的格式是这样的:('描述字符串', [整数列表1], [整数列表2])。这个文本文件可能看起来像这样:
('item 1', [1,2,3,4] , [4,3,2,1])
('item 2', [ ] , [4,3,2,1])
('item 3', [1,2] , [ ])
我想从这个文本文件中读取每一行,然后把它们直接放到一个函数里,
function(string, list1, list2)
我知道每一行读取进来的是一个字符串,但我需要以某种方式提取出这个字符串。我尝试使用字符串的split(',')方法,但在处理列表时遇到了问题。有没有什么办法可以做到这一点,还是我需要以某种方式修改我的文本文件?
我还有一个文本文件,里面是一个元组的列表,格式是这样的:
[(1,2),(3,4),(5,6),...]
这个文件可能包含任意数量的元组。我想把它读成一个列表,然后对列表中的每个元组进行循环。我觉得这两者的处理方式大致相同。
3 个回答
1
你可能还想看看 pickle 这个模块,它可以把Python对象保存到文本文件里,然后再把它们读回来。
20
你可以使用 ast.literal_eval()
这个函数。
>>> ast.literal_eval("('item 1', [1,2,3,4] , [4,3,2,1])")
('item 1', [1, 2, 3, 4], [4, 3, 2, 1])
13
那用 eval
呢?
编辑 请查看 @Ignacio 的回答,里面用到了 ast.literal_eval
。
>>> c = eval("('item 1', [1,2,3,4] , [4,3,2,1])")
>>> c
('item 1', [1, 2, 3, 4], [4, 3, 2, 1])
我只建议在你对文件内容百分之百确定的情况下使用这个。
>>> def myFunc(myString, myList1, myList2):
... print myString, myList1, myList2
...
>>> myFunc(*eval("('item 1', [1,2,3,4] , [4,3,2,1])"))
item 1 [1, 2, 3, 4] [4, 3, 2, 1]
看看 @Ignacio 的回答……安全得多。
使用 ast 的话,结果会是:
>>> import ast
>>> def myFunc(myString, myList1, myList2):
... print myString, myList1, myList2
...
>>> myFunc(*ast.literal_eval("('item 1', [1,2,3,4] , [4,3,2,1])"))
item 1 [1, 2, 3, 4] [4, 3, 2, 1]