9.7Python文件操作(7):使用pickle进行二进制IO
2018-03-13 12:23
399 查看
@概述
通常的文件读写要么是读入/写出字符,要么是读入/写出字节;
而二进制IO是指直接是读入/写出Python数据类型的值;
二进制IO可以给小规模的数据读写带来极大的便利;
其底层原理,仍是某种形式的对象到字节的“编码”,以及字节到对象的“解码”;
对文件进行二进制IO时,文件的打开方模式必须是字节读写模式;
我们习惯上将存储二进制IO数据的文件以.dat后缀命名;
pickle是系统标准库所提供的二进制IO模块;
通过pickle.dump(data,outfile)和pickle.load(infile)我们可以方便地写出和读入Python对象;
@序列化 / 卸载
- 在二进制IO中,写出称为序列化(即将Pytho对象转为字节),又称为卸载;
- 下面的例子演示了向1.dat中写入整型、浮点型、布尔型、以及列表类型的Python数据对象:
@反序列化 / 加载
- 在二进制IO中,读入称为反序列化(即将字节转为Pytho对象),又称为加载;
- file.load(infile)每次加载一条当初写出的数据,能够load的次数和当初dump的次数是相等的;
- 下面的例子演示了从1.dat中读入当初写出的Python数据对象:
@EOFError文件末尾错误
全称为End Of File Error,即文件末尾错误;
对于一个二进制IO写出的文件,当初进行了几次dump,则读入时只能对应几次load的动作;
如果load次数已经达到当初dump写出的次数,再继续load系统就会抛出EOFError;
如果既要保证load完所有数据,又要保证程序不崩溃,我们可以结合死循环和try-except来编码;
通常的文件读写要么是读入/写出字符,要么是读入/写出字节;
而二进制IO是指直接是读入/写出Python数据类型的值;
二进制IO可以给小规模的数据读写带来极大的便利;
其底层原理,仍是某种形式的对象到字节的“编码”,以及字节到对象的“解码”;
对文件进行二进制IO时,文件的打开方模式必须是字节读写模式;
我们习惯上将存储二进制IO数据的文件以.dat后缀命名;
pickle是系统标准库所提供的二进制IO模块;
通过pickle.dump(data,outfile)和pickle.load(infile)我们可以方便地写出和读入Python对象;
@序列化 / 卸载
- 在二进制IO中,写出称为序列化(即将Pytho对象转为字节),又称为卸载;
- 下面的例子演示了向1.dat中写入整型、浮点型、布尔型、以及列表类型的Python数据对象:
# 卸载,序列化 outfile = open(r"../res/1.dat","wb") pickle.dump(123,outfile) pickle.dump(45.6,outfile) pickle.dump(True,outfile) pickle.dump(["fuck","shit","welcome"],outfile) outfile.close()
@反序列化 / 加载
- 在二进制IO中,读入称为反序列化(即将字节转为Pytho对象),又称为加载;
- file.load(infile)每次加载一条当初写出的数据,能够load的次数和当初dump的次数是相等的;
- 下面的例子演示了从1.dat中读入当初写出的Python数据对象:
# 加载,反序列化 infile = open(r"../res/1.dat", "rb") print(pickle.load(infile)) print(pickle.load(infile)) print(pickle.load(infile)) print(pickle.load(infile)) infile.close()
@EOFError文件末尾错误
全称为End Of File Error,即文件末尾错误;
对于一个二进制IO写出的文件,当初进行了几次dump,则读入时只能对应几次load的动作;
如果load次数已经达到当初dump写出的次数,再继续load系统就会抛出EOFError;
如果既要保证load完所有数据,又要保证程序不崩溃,我们可以结合死循环和try-except来编码;
# 卸载,序列化 outfile = open(r"../res/1.dat", "wb") pickle.dump(123, outfile) pickle.dump(45.6, outfile) pickle.dump(True, outfile) pickle.dump(["fuck", "shit", "welcome"], outfile) outfile.close() # 加载,反序列化 infile = open(r"../res/1.dat", "rb") try: while True: print(pickle.load(infile)) except EOFError: print("读你妹啊") # 异常捕获后的代码仍可以正常向下执行 print("领取五毛") infile.close()
相关文章推荐
- IO:如何使用FileOutputStream来进行文件操作
- 使用IO进行文件的复制操作
- 使用FSO按文件大小浏览文件目录并进行删除操作
- VC中使用CFileDialog进行文件操作
- 使用IRP进行文件操作
- *使用Java操作二进制文件 (转)
- 使用java.io.*操作文件的拆分与合并,Application一例!
- 一个项目中使用到的通用函数库(3) 文件IO操作!
- C#中使用API(SHFileOperation)进行文件操作,特别说明了回收站相关参数
- 使用IRP进行文件操作
- SQL SERVER 2005中使用sql语句对xml 文件和其数据的进行操作(很全面)
- 使用Python进行二进制文件读写
- 在Delphi中使用CreateOleObject方法对WORD文件进行操作
- VC中使用CFileDialog进行文件操作
- 使用java.io.*操作文件的拆分与合并,Application一例
- 使用Java操作二进制文件 (转)
- 使用yacc对文件进行操作
- 使用Java操作二进制文件
- 使用IRP进行文件操作
- 使用FSO按文件大小浏览文件目录并进行删除操作