【问题标题】:Reading a list of lists from a file as list of lists in python从文件中读取列表列表作为python中的列表列表
【发布时间】:2012-05-04 21:03:09
【问题描述】:

我以列表列表的形式收集数据并将数据写入文本文件。文本文件中的数据看起来像

[[123231,2345,888754],[223467,85645]]

我想读回它并将其存储在我的程序中的列表列表中。但是,当我从文件中执行read() 并尝试创建一个平面列表时,它将所有内容都作为一个字符串,并且解释完全改变了,我无法查询在 python 中作为普通列表读取后得到的结果。

有人可以帮助我阅读文件并以与列表列表相同的格式存储吗?

谢谢!

【问题讨论】:

  • 你能让你的问题更干净吗?

标签: python file list


【解决方案1】:

确保:

  • 列表数据所在的文件是python文件
  • 列表数据分配给一个变量
  • 文件位于 python 模块中

然后您可以从 python 文件中导入列表。 例如说列表 my_list 在文件中 mylist.py

例如:

# This is the file mylist.py
my_list = [[123231,2345,888754],[223467,85645]]

然后您可以将 my_list 视为 python 列表

from mylist import my_list

for item in mylist:
   print "item = <", item, ">"

【讨论】:

    【解决方案2】:

    您也可以使用eval 来实现这一点,但其他解决方案可能更好:

    # reading a list from a file
    f = open('data.txt', 'r')
    l = eval(f.read())
    
    # storing a list to a file
    outf = open('out','w')
    outf.write(str(l))
    

    有时使用eval 是一种不好的做法。更多信息请查看this post

    【讨论】:

      【解决方案3】:

      您可以改为 pickle 您的数据。保存:

      >>> import pickle
      >>> p= [[123231,2345,888754],[223467,85645]]  
      >>> with open("data.txt", "wb") as internal_filename:
      ...     pickle.dump(p, internal_filename)
      

      要加载它:

      >>> with open("data.txt", "rb") as new_filename:
      ...     pp = pickle.load(new_filename)
      >>> pp
      [[123231, 2345, 888754], [223467, 85645]]
      

      这对于更复杂的对象也很有用。

      【讨论】:

        【解决方案4】:

        这看起来像是有效的JSON

        所以你可以简单地做:

        import json
        with open(myfilename) as f:
            lst = json.load(f)
        

        要将“列表列表”存储在文件中,请执行以下操作

        with open(myfilename, "w") as f:
            json.dump(lst, f)
        

        【讨论】:

        • 这是一个有效的 JSON?没有双引号。没有键值对。你能解释一下吗?
        • @PranavNandan:为什么会有?并非所有 JSON 对象都是键/值对。 json.loads("[[123231,2345,888754],[223467,85645]]") 返回[[123231,2345,888754],[223467,85645]]
        • en.wikipedia.org/wiki/JSON#Data_types,_syntax_and_example,特别是关于数组的部分。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-02-01
        • 1970-01-01
        • 2020-02-25
        • 1970-01-01
        • 2016-10-03
        • 2018-04-20
        • 2022-01-11
        相关资源
        最近更新 更多