python文件操作:pickle模块多次dump后出现的读取问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python文件操作:pickle模块多次dump后出现的读取问题相关的知识,希望对你有一定的参考价值。

pickle模块在python中是用于数据持久化的,基本用法涉及到的也就是dump和load,亦或者dumps和loads。

pickle在使用过程中有一个特点,就是由于其特殊的内容标记,使得文件dump几次,就必须load几次才能将数据全部读出来,用代码来展现就是如下形式:

import pickle

a=1
b=2
c=3
with open("ceshi.txt","wb") as f:
    pickle.dump(a,f)
    pickle.dump(b,f)
    pickle.dump(c,f)

f=open("ceshi.txt","rb")
with open("ceshi.txt","rb") as f :
    print(pickle.load(f))

最终结果为:

1

 

如果想要读取全部的值,那么只能是dump了几次,就load几次,如下:

import pickle

a=1
b=2
c=3
with open("ceshi.txt","wb") as f:
    pickle.dump(a,f)
    pickle.dump(b,f)
    pickle.dump(c,f)

f=open("ceshi.txt","rb")
with open("ceshi.txt","rb") as f :
    print(pickle.load(f))
    print(pickle.load(f))
    print(pickle.load(f))

最终结果为:

1

2

3

 

我们在后续读写文件时,不可能记住所有的dump次数,也就无法准确的使用load多次的方式来取出值。我们可以使用另外一种方式来进行曲线救国:

直接无限循环执行pickle.load命令,直至其报错才停止。

import pickle

a=1
b=2
c=3
with open("ceshi.txt","wb") as f:
    pickle.dump(a,f)
    pickle.dump(b,f)
    pickle.dump(c,f)

f=open("ceshi.txt","rb")
with open("ceshi.txt","rb") as f :
   while True:
        try:
            print(pickle.load(f))
        except:
            break

最终结果为:

1

2

3

 

通过这种方式,我们也可以做到将pickle生成的文件内容全部取出来。

以上是关于python文件操作:pickle模块多次dump后出现的读取问题的主要内容,如果未能解决你的问题,请参考以下文章

Python pickle模块

python shelve 模块

Python pickle模块

shelve模块

pickle.dump()和pickle.load()进行文件操作

Python中Pickle模块的dump()方法和load()方法