Python中如何实现打开pickle文件后先读取再写入?
open rb+ 是可以先读后写,调试程序的时候才发现,不能在结合使用 pickle 的时候先读后写,写的时候会抛出错误.那么如何实现先读后 覆盖写 呢?
一小段测试代码: http://chuantu.biz/t6/311/1526454143x-1404795577.jpg
Python中如何实现打开pickle文件后先读取再写入?
6 回复
写到一个临时文件 确定写入成功之后把临时文件覆盖原文件
直接使用 open() 模式 'rb+' 或 'ab+' 就行,但要注意文件指针位置。pickle 读写通常分两步更清晰安全。
核心方案:
- 分步读写(推荐):先
'rb'读取全部数据到变量,再'wb'写入修改后的数据。简单可靠,避免指针混乱。 - 单文件混合模式:用
'rb+'打开,但需要手动控制文件指针(seek(0)回到开头),且新数据长度不能超过原文件,否则会覆盖不全。不推荐新手用。
示例代码(分步读写,最常用):
import pickle
def read_then_write(pickle_file_path, new_data):
# 1. 读取原数据
try:
with open(pickle_file_path, 'rb') as f:
original_data = pickle.load(f) # 读取已有内容
except FileNotFoundError:
original_data = None # 文件不存在时初始化
# 2. 处理数据(示例:如果是列表就追加)
if original_data is None:
original_data = [new_data]
elif isinstance(original_data, list):
original_data.append(new_data)
else:
# 根据你的数据结构调整
original_data = [original_data, new_data]
# 3. 写入新数据(覆盖原文件)
with open(pickle_file_path, 'wb') as f:
pickle.dump(original_data, f)
# 使用示例
read_then_write('data.pkl', {'new_key': 'new_value'})
关键点:
'rb'和'wb'是二进制读写模式,pickle 必须用。- 先读后写时,读用
'rb',写用'wb'(会覆盖文件)。 - 如果要在原数据基础上修改,一定要先
pickle.load()拿到对象,修改对象,再pickle.dump()写回。
一句话建议:用 'rb' 读、'wb' 写分两步操作最稳。
要这么操作才行啊
如果要这样,那还不如 open 二次 第一次读 第二次写
pickle.dump(fh)是啥意思,缺失参数吧,dump(obj, file, protocol=None)
原来是语法写错了!

