我有一个我想阅读的文本文件,其中包含元组行。文本中的每个元组/行都是('描述字符串',[整数列表1],[整数列表2])的形式。文本文件可能类似于:
('第1项',[1,2,3,4],[4,3,2,1])
('项目2',[],[4,3,2,1])
('第3项,[1,2],[])
我希望能够从文本文件中读取每一行,然后将它们直接放入函数中,
function(string, list1, list2)
我知道每一行都是以字符串形式读入的,但我需要提取一些字符串。我一直在尝试使用string.split(','),但是当我点击列表时会遇到问题。有没有办法实现这一点,还是我必须修改我的文本文件?
我还有一个文本列表的文本文件,我想以类似的形式阅读
[(1,2),(3,4),(5,6),...]
可能包含任何数量的元组。我想在列表中读取它并为列表中的每个元组执行for循环。我认为这两个将使用大致相同的过程。
答案 0 :(得分: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])
答案 1 :(得分:13)
使用eval
怎么样?
编辑使用ast.literal_eval
查看@ Ignacio的回答。
>>> c = eval("('item 1', [1,2,3,4] , [4,3,2,1])")
>>> c
('item 1', [1, 2, 3, 4], [4, 3, 2, 1])
如果您100%确定文件内容,我建议您这样做。
>>> 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]
答案 2 :(得分:1)
您可能还需要查看pickle模块,将python对象保存到文本文件中,然后再将其读回。