如果我想打开一个文件,解开文件中的一个对象,然后再覆盖它,就可以使用
data = {} #Its a dictionary in my code
file = open("filename","wb")
data = pickle.load(file)
data["foo"] = "bar"
pickle.dump(data,file)
file.close()
或者我必须先使用“ rb”,然后再使用“ wb”(与每个语句一起使用),这就是我现在正在做的。请注意,在我的程序中,在打开文件和关闭文件之间有一个哈希算法,这就是字典数据的来源,我基本上希望能够只打开一次文件而不必对语句做两次< / p>
答案 0 :(得分:1)
如果要读取然后写入文件,则完全不要使用涉及w
的模式;他们所有人都在打开文件时将其截断。
如果已知该文件存在,请使用模式"rb+"
,该模式将打开一个现有文件以供读取和写入。
您的代码只需更改一点:
# Open using with statement to ensure prompt/proper closing
with open("filename","rb+") as file:
data = pickle.load(file) # Load from file (moves file pointer to end of file)
data["foo"] = "bar"
file.seek(0) # Move file pointer back to beginning of file
pickle.dump(data, file) # Write new data over beginning of file
file.truncate() # If new dump is smaller, make sure to chop off excess data
答案 1 :(得分:-1)
您可以使用wb+
来打开文件以进行读写
这个问题有助于理解每个python读写条件之间的差异,但是最后添加+
通常总是会同时打开文件进行读写操作