2014-01-08 27 views
0

我需要將代表遊戲世界中地圖的二維數組保存到configparser中。數據如下所示:如何在Python中保存二維數組(列表)?

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

作爲示例。

我可以明顯地保存數據,但我不能把它從一個字符串中讀回來後轉換回列表...

,如果我不得不使用一個txt文件,我不介意順便說一下,只需用普通的文本文件處理程序讀入。

+1

[pickle](http://docs.python.org/2/library/pickle.html)也可能是一個很好的方式來獲得你想要的 –

回答

3

Python有一個保存Python數據的模塊,名爲pickle。你可以使用它。從文檔:

pickle模塊實現了一個基本但功能強大的算法,用於對對象結構進行序列化和反序列化。 「酸洗」 是將Python對象層次結構轉換爲 字節流的過程,「取消」是相反的操作,由此將字流轉換回對象層次結構。酸洗(或取消) 或者稱爲「序列化」,「編組」,或者「變平」,但是,爲了避免混淆,這裏使用的術語 是「酸洗」和「取消」。

演示:

>>> 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]] 
+0

對不起,關於n00by這個評論的聲音...我在......之前我只簡單地聽說過泡菜和它的用途......基本上,這是否允許我保存列表,然後將它作爲列表重新讀入,而沒有任何其他麻煩?如果是這樣,那麼我認爲這是要走的路......感謝迅速的迴應! – Ilmiont

+1

我給我的回答添加了一個演示。 –

+0

非常感謝,這正是我想要的! – Ilmiont

-1

對於字符串轉換到一個列表中,你可以做這樣的事情:

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

你可以用一個簡單的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'> 

這是一個非常快和污垢y解決方案,您應該使用更安全,更好的輸入文件解析器(如pickle)。