2015-09-25 93 views
0

我是新來的python,試圖存儲/檢索一些複雜的數據結構到文件中,並且正在嘗試酸洗。 但是,下面的例子不斷創建一個空白文件(沒有任何內容存儲在這裏),並且在第二步中遇到錯誤。我一直在搜索,只是爲了找到與我的完全匹配的其他例子 - 但它似乎並沒有工作。 我可能會缺少什麼?提前tx!python-3.x酸洗創建空文件

import pickle 

messageToSend = ["Pickle", "this!"] 
print("before: \n",messageToSend) 

f = open("pickletest.pickle","wb") 
pickle.dump(messageToSend,f) 
f.close 

g = open("pickletest.pickle","rb") 
messageReceived = pickle.load(g) 
print("after: \n",messageReceived) 
g.close 
+0

什麼是錯誤? – Peter

+0

(重新打開文件)第二步給出了錯誤,該文件是空的 – Adam

回答

2

您沒有關閉文件。注意你寫f.close而不是f.close()

正確的方法在Python處理文件是:

with open("pickletest.pickle", "wb") as f: 
    pickle.dump(messageToSend, f) 

所以它會自動關閉該文件時,with塊結束即使有處理過程中出現錯誤。

給出的其他答案只適用於某些Python實現,因爲它依賴於關閉文件的垃圾回收器。這是相當不可靠和容易出錯的。處理任何需要關閉的東西時始終使用with

0

我還不確定爲什麼,但這個問題涉及到您指定的變量來打開文件。不要分配變量和代碼工作。

import pickle 

messageToSend = ["Pickle", "this!"] 
print("before: \n",messageToSend) 

pickle.dump(messageToSend, open("pickletest.pickle","wb")) 

messageReceived = pickle.load(open("pickletest.pickle","rb")) 
print("after: \n",messageReceived) 
+0

這是奇怪... 但肯定的,它的工作原理 我也試過: 開放(「pickletest.pickle」,「WB」 )爲f: 和pickle.dump(messageToSend,F) 開放( 「pickletest.pickle」, 「RB」)作爲G: 的messageReceived =和pickle.load(G) 和它的作品,以及... 我明白這些是等效的 - 顯然不是。 有誰知道爲什麼? – Adam