打开和覆盖文件时是否只能使用“ wb”?

时间:2018-10-26 19:51:48

标签: python file pickle

如果我想打开一个文件,解开文件中的一个对象,然后再覆盖它,就可以使用

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>

2 个答案:

答案 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读写条件之间的差异,但是最后添加+通常总是会同时打开文件进行读写操作

Confused by python file mode "w+"