如何在 Python 中保存二维数组(列表)?
Posted
技术标签:
【中文标题】如何在 Python 中保存二维数组(列表)?【英文标题】:How to save 2D arrays (lists) in Python? 【发布时间】:2014-01-08 12:54:36 【问题描述】:我需要将表示游戏世界中地图的二维数组保存到配置解析器。数据如下所示:
[[0, 0, 0, 0, 0], [0, 1, 1, 1, 0], [0, 0, 0, 0, 0]]
举个例子。
我显然可以保存数据,但在读回数据后,我无法将其从字符串转换回列表...
顺便说一句,我不介意是否必须使用 .txt 文件,只需使用普通文本文件处理程序将其读入即可。
【问题讨论】:
pickle 也可能是获得您想要的东西的好方法 【参考方案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']
【讨论】:
以上是关于如何在 Python 中保存二维数组(列表)?的主要内容,如果未能解决你的问题,请参考以下文章