Python 基于pickle数据的Seek
可以用Python跳转到pickle文件中的特定记录吗 例如:Python 基于pickle数据的Seek,python,pickle,seek,Python,Pickle,Seek,可以用Python跳转到pickle文件中的特定记录吗 例如: 导入pickle 以open('BinaryFile.dat',mode='wb')作为MyFile: pickle.dump('Item1',MyFile) pickle.dump('Item2',MyFile) pickle.dump('Item3',MyFile) pickle.dump('Item4',MyFile) pickle.dump('Item5',MyFile) 打开('BinaryFile.dat',mode='
导入pickle
以open('BinaryFile.dat',mode='wb')作为MyFile:
pickle.dump('Item1',MyFile)
pickle.dump('Item2',MyFile)
pickle.dump('Item3',MyFile)
pickle.dump('Item4',MyFile)
pickle.dump('Item5',MyFile)
打开('BinaryFile.dat',mode='rb')作为MyReadFile时:
MyReadFile.seek(3)
打印(pickle.load(MyReadFile))
给出\u pickle.UnpicklingError:无效的加载键“\x05”。
seek甚至可以处理精选的数据吗?我需要多次调用pickle.load(MyReadFile)吗?pickle记录可以连接到一个文件中,因此,是的,您可以多次调用
pickle.load(f)
,但文件本身的索引方式不允许您搜索给定的记录
你的<代码> F.S寻(3)所做的是查找文件中的第三个字节,该文件位于一个泡菜记录的中间,因此不能被清除。
如果您需要随机访问,您可能希望查看使用数据库文件模块在pickle
之上构建字典式界面的
(另一个简单的方法是,只需拥有一个满是pickle文件的目录。)您可以这样做:在调用
pickle.dump()
之前,使用filetell()
方法显式保存每个项目的起始位置,然后使用该信息在pickle.load()
之前重新定位文件流
我的意思是:
import pickle
indices = []
with open ('BinaryFile.dat', mode='wb') as MyFile:
indices.append(MyFile.tell())
pickle.dump('Item1', MyFile)
indices.append(MyFile.tell())
pickle.dump('Item2', MyFile)
indices.append(MyFile.tell())
pickle.dump('Item3', MyFile)
indices.append(MyFile.tell())
pickle.dump('Item4', MyFile)
indices.append(MyFile.tell())
pickle.dump('Item5', MyFile)
with open('BinaryFile.dat', mode='rb') as MyReadFile:
MyReadFile.seek(indices[3])
print(pickle.load(MyReadFile)) # -> Item4
当然,要使其真正有用,还需要将位置数据保存到
索引
列表中。如果要在文件中向后移动,该怎么办?有没有办法pickle.unload(f)
?没有,但是您可以使用f.tell()
来确定每次之后您在文件中的位置。load()
,跟踪它们,然后f.seek()
返回到您想要的位置。谢谢。所以我可以使用seek,但前提是它指向记录的开始?