如何在Python中保存2D数组(列表)?

时间:2014-01-08 12:54:37

标签: python arrays list save

我需要将代表游戏世界中地图的2D数组保存到配置程序中。数据如下所示:

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

作为一个例子。

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

顺便说一句,我不介意是否必须使用.txt文件,只需使用普通的文本文件处理程序读取它。

3 个答案:

答案 0 :(得分:3)

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

  

pickle模块实现了一个基本但强大的算法   序列化和反序列化Python对象结构。 “酸洗”   是将Python对象层次结构转换为a的过程   字节流和“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]]

答案 1 :(得分:1)

您可以使用简单的评估

来完成
>>> 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)。

答案 2 :(得分:-1)

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

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