【问题标题】:Read in tuple of lists from text file as tuple, not string - Python从文本文件中读取列表元组作为元组,而不是字符串 - 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 循环。我认为这两个将使用大致相同的过程。

【问题讨论】:

    标签: python file list text tuples


    【解决方案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。我正在将一个元组作为配置设置的参数之一写入文件。使用它可以让我读回代表元组的字符串并将其转换回元组。这对于在配置文件中创建数据列表或元组非常强大。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-21
        相关资源
        最近更新 更多