【问题标题】:How to save 2D arrays (lists) in Python?如何在 Python 中保存二维数组(列表)?
【发布时间】:2014-01-08 12:54:36
【问题描述】:

我需要将表示游戏世界中地图的二维数组保存到配置解析器。数据如下所示:

[[0, 0, 0, 0, 0], [0, 1, 1, 1, 0], [0, 0, 0, 0, 0]]

举个例子。

我显然可以保存数据,但在读回数据后,我无法将其从字符串转换回列表...

顺便说一句,我不介意是否必须使用 .txt 文件,只需使用普通文本文件处理程序将其读入即可。

【问题讨论】:

  • pickle 也可能是获得您想要的东西的好方法

标签: python arrays list save


【解决方案1】:

Python 有一个名为 pickle 的用于保存 Python 数据的模块。你可以用那个。来自文档:

pickle 模块实现了一个基本但强大的算法 序列化和反序列化 Python 对象结构。 “腌制” 是将 Python 对象层次结构转换为 字节流,而“unpickling”是逆操作,其中一个字节 流被转换回对象层次结构。酸洗(和 unpickling) 也称为“序列化”、“编组”、 1 或“扁平化”,但为避免混淆,此处使用的术语 是“酸洗”和“解酸”。

演示:

>>> import pickle
>>> data = [[0, 0, 0, 0, 0], [0, 1, 1, 1, 0], [0, 0, 0, 0, 0]]
>>> with open('C:/temp/pickle_test.data', 'w') as f:
    pickle.dump(data, f)


>>> with open('C:/temp/pickle_test.data', 'r') as f:
    new_data = pickle.load(f)


>>> new_data
[[0, 0, 0, 0, 0], [0, 1, 1, 1, 0], [0, 0, 0, 0, 0]]

【讨论】:

  • 对以下评论的 n00by 声音感到抱歉...我之前只简要听说过泡菜及其用途...基本上,这可以让我保存列表然后再读回来在没有任何其他麻烦的列表中???如果是这样,那么我认为这是要走的路...感谢您的快速响应!
  • 我在答案中添加了一个演示。
  • 非常感谢,这正是我想要的!
  • 如果你觉得我的回答对你有帮助,你可以Accept my Answer
  • 你需要以二进制模式打开文件open('C:/temp/pickle_test.data', 'wb')和读取open('C:/temp/pickle_test.data', 'rb')一样
【解决方案2】:

您可以使用简单的 eval 来完成

>>> x="[[0, 0, 0, 0, 0], [0, 1, 1, 1, 0], [0, 0, 0, 0, 0]]"
>>> type(x);
<type 'str'>
>>> y=eval(x);
>>> print(y);
[[0, 0, 0, 0, 0], [0, 1, 1, 1, 0], [0, 0, 0, 0, 0]]
>>>type(y);
<type 'list'>

这是一个非常快速且的解决方案,您应该使用更安全和更好的输入文件解析器(如pickle)。

【讨论】:

    【解决方案3】:

    要将字符串转换为列表,您可以执行以下操作:

    myList = [x for x in "0,1,2,3".split(",")]
    type(myList)
    <type 'list'>
    print myList
    ['0', '1', '2', '3']
    

    【讨论】:

      猜你喜欢
      • 2020-10-29
      • 1970-01-01
      • 2012-03-03
      • 2015-05-22
      • 2011-05-03
      • 1970-01-01
      • 2014-09-14
      • 2019-12-06
      • 2021-01-16
      相关资源
      最近更新 更多