2013-01-07 26 views
0

有沒有將列表嵌入或集成到.py文件的方法?將列表嵌入python文件

我的詞典列表,存儲在磁盤上爲hypotheses.npz,在打印時(前兩個元素),看起來像這樣:

[[ {'d3': 936.0, 'v': 110.89930725097656, 'c1': 4.5781828608194246, 'c0': -0.11199983705745155, 'd2': 1041.0, 'd4': 495.0, 'fn_def': array([/Desktop/example/behaviors.pyc, BGL_Day_Av, [1482, 1483, 1484]], dtype=object), 'd1': 493.0}] [ {'d3': 949.0, 'v': 109.9293212890625, 'c1': 4.7908983437736889, 'c0': -0.097829151375310855, 'd2': 1054.0, 'd4': 831.0, 'fn_def': array([/Desktop/example/behaviors.pyc, BGL_Day_Av, [966, 967, 968]], dtype=object), 'd1': 321.0}]]

我想要第二個.py文件使用這個,但我想讓該文件具有可移植性,所以我不想從磁盤讀取這個.npz文件。將列表靜態寫入python文件的最佳方式是什麼,並給它一些可以在最終腳本中使用的名稱?

+0

只是爲了澄清,你想擁有的內容的文件(你的字典列表)作爲一個對象提供給你的第二個'.py'文件,但你不想從磁盤讀取它? – RocketDonkey

+0

@RocketDonkey完全。 @root我想用它作爲列表對象。我的問題是,該字符串是否可以寫入'.py'文件,這在python程序中是合理的? –

+1

不要聽起來那麼尖銳,但如果你不想在任何地方閱讀它,而你只是想「在那裏」,那麼只需將它複製/粘貼到文件中呢?否則,我想不出以什麼方式讀取它(但這並不是說沒有辦法)就可以訪問它。 – RocketDonkey

回答

2

您可以序列列表對象和嵌入字符串:

import pickle 

lst = [[ {'d3': 936.0, 'd2': 1041.0, 'd4': 495.0} ]] 

print 'pickle_string = """'+ pickle.dumps(lst) +'"""' 

輸出:

pickle_string = """(lp0 
(lp1 
(dp2 
S'd4' 
p3 
F495.0 
sS'd2' 
p4 
F1041.0 
sS'd3' 
p5 
F936.0 
saa.""" 

Unpickle有:

lst = pickle.loads(pickle_string) 
+0

謝謝。這幾乎做到了。這只是一個問題,對於一些大的「假設」輸入,我得到: 'ValueError:不安全的字符串pickle'。 我認爲這可能是因爲字典的'fn_def'字段,因爲它們包含字符串數組。我認爲在pickle dump的某個地方會出現一個''''或'''不匹配的情況。想知道如何解決這個問題? –

+0

用'pickle.dump()'轉儲文件並立即調用'load()'而不關閉文件流](http://stackoverflow.com/a/13395516/1460062)可能導致一個損壞的字符串。 – Richard