从文本文件中读取列表元组作为元组,而不是字符串 - Python

Das*_*Rot 7 python text tuples file list

我有一个我想阅读的文本文件,其中包含元组行.文本中的每个元组/行都是('描述字符串',[整数列表1],[整数列表2])的形式.文本文件可能类似于:

('项目1',[1,2,3,4],[4,3,2,1])
('项目2',[],[4,3,2,1])
('项目3, [1,2],[])

我希望能够从文本文件中读取每一行,然后将它们直接放入函数中,

function(string, list1, list2)
Run Code Online (Sandbox Code Playgroud)

我知道每一行都是以字符串形式读入的,但我需要提取一些字符串.我一直在尝试使用string.split(','),但是当我点击列表时会遇到问题.有没有办法完成这个或我将不得不修改我的文本文件一些如何?

我还有一个元组列表的文本文件,我想以类似的形式阅读

[(1,2),(3,4),(5,6),...]

可能包含任何数量的元组.我想在列表中读取它并为列表中的每个元组执行for循环.我认为这两个将使用大致相同的过程.

Ign*_*ams 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])
Run Code Online (Sandbox Code Playgroud)


sbe*_*rry 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])
Run Code Online (Sandbox Code Playgroud)

如果您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]
Run Code Online (Sandbox Code Playgroud)

看看@ 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]
Run Code Online (Sandbox Code Playgroud)