从文本文件中读取列表元组作为元组,而不是字符串 - Python
Posted
技术标签:
【中文标题】从文本文件中读取列表元组作为元组,而不是字符串 - Python【英文标题】:Read in tuple of lists from text file as tuple, not string - Python 【发布时间】:2011-06-17 11:53:52 【问题描述】:我有一个要读取的文本文件,其中包含多行元组。文本中的每个元组/行的形式为 ('description string', [list of integers 1], [list of integers 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 循环。我认为这两个将使用大致相同的过程。
【问题讨论】:
【参考方案1】:您可能还想查看pickle 模块,用于将 python 对象保存到文本文件中,然后再将它们读回。
【讨论】:
【参考方案2】:使用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]
【讨论】:
【参考方案3】:您正在寻找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])
【讨论】:
我可能应该提到我正在运行 Python 2.3,这是用于更高版本的吗?我找不到 ast 模块。 @Das.Rot:不幸的是。 @Das.Rot:看起来是 2.6+。如果您确定内容,那么eval
将起作用。
天啊,这对我来说解决了一件非常重要的事情。我正在使用 ConfigParser。我正在将一个元组作为配置设置的参数之一写入文件。使用它可以让我读回代表元组的字符串并将其转换回元组。这对于在配置文件中创建数据列表或元组非常强大。以上是关于从文本文件中读取列表元组作为元组,而不是字符串 - Python的主要内容,如果未能解决你的问题,请参考以下文章