Python 使用cPickle时出现问题
你能帮我把这个exmaple修好吗 我想加载一个序列化的dict,如果它存在,修改它并再次转储它。我想我打开文件的方式有问题,但我不知道正确的方式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
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')、转储和关闭文件句柄