2015-09-25 95 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