Python 使用cPickle时出现问题

Python 使用cPickle时出现问题,python,pickle,Python,Pickle,你能帮我把这个exmaple修好吗 我想加载一个序列化的dict,如果它存在,修改它并再次转储它。我想我打开文件的方式有问题,但我不知道正确的方式 import os import cPickle as pickle if os.path.isfile('file.txt'): cache_file = open('file.txt', 'rwb') cache = pickle.load(cache_file) else: cache_file = open('fil

你能帮我把这个exmaple修好吗

我想加载一个序列化的dict,如果它存在,修改它并再次转储它。我想我打开文件的方式有问题,但我不知道正确的方式

import os
import cPickle as pickle

if os.path.isfile('file.txt'):
    cache_file = open('file.txt', 'rwb')
    cache = pickle.load(cache_file)
else:
    cache_file = open('file.txt', 'wb')
    cache = dict.fromkeys([1,2,3])

# modifications of cache

pickle.dump(cache, cache_file)
cache_file.close()    
运行两次以查看错误:

Traceback (most recent call last):
  File "example.py", line 11, in <module>
    pickle.dump(cache, cache_file)
IOError: [Errno 9] Bad file descriptor
回溯(最近一次呼叫最后一次):
文件“example.py”,第11行,在
pickle.dump(缓存,缓存文件)
IOError:[Errno 9]错误的文件描述符

'rwb'
对于
open()
来说不是正确的文件打开模式。试试
'r+b'


读取文件后,光标将定位在文件的末尾,因此
pickle.dump(cache,cache\u file)
将附加到文件中(这可能不是您想要的)。请尝试
cache\u文件。在
pickle.load(cache\u文件)
之后查找(0)

对于
open()
来说,“rwb”是不正确的文件打开模式。试试
'r+b'


读取文件后,光标将定位在文件的末尾,因此
pickle.dump(cache,cache\u file)
将附加到文件中(这可能不是您想要的)。在
pickle.load(cache\u file)
之后尝试
cache\u file.seek(0)

您已打开文件进行读取和写入,即随机访问。当您最初读取文件时,您将文件索引位置保留在文件的末尾,因此当您稍后写回数据时,您将附加到同一文件


您应该在读取模式下打开文件,读取数据,关闭文件,然后在写入模式下重新打开。

您已打开文件进行读取和写入,即随机访问。当您最初读取文件时,您将文件索引位置保留在文件的末尾,因此当您稍后写回数据时,您将附加到同一文件


您应该以读取模式打开文件,读取数据,关闭文件,然后以写入模式重新打开。

对于每次加载,您需要打开(使用mode='rb')、加载和关闭文件句柄。

对于每个转储,需要打开(使用mode='wb')、转储和关闭文件句柄

对于每次加载,您都需要打开(使用mode='rb')、加载和关闭文件句柄。
对于每个转储,需要打开(使用mode='wb')、转储和关闭文件句柄