使用pickle模块进行二进制文件的读写
python的pickle模块实现了基本的数据序列和反序列化。通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储;通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。
基本接口
pickle.dump(obj, file, [,protocol]) # 文件写入
pickle.load(file) # 文件读出
- protocol:序列化使用的协议版本
- 0:ASCII协议,所序列化的对象使用可打印的ASCII码表示;
- 1:老式的二进制协议;
- 2:2.3版本引入的新二进制协议,较以前的更高效。
- (其中协议0和1兼容老版本的python。protocol默认值为0。)
- file:对象保存和读取的类文件对象
- [ 写入] file对象必须有write()接口,可以是一个以‘w’方式打开的文件或者是一个StringIO对象或者其他任何实现write()接口的对象。
- [ 读出] file对象为类文件对象,有read()和readline()接口。
代码实现
#coding=utf-8
# 使用pickle模块读写二进制文件
import pickle
data = {'a': [1, 2.0, 3, 4+6j],
'b': ('string', u'Unicode string'),
'c': None
}
def write(path):
output = open(path, 'wb')
'''
写二进制文件需要使用'wb',因为二进制文件会出现'/n'换行符,
实际上是'0X0A',windows平台会自动将其变为两个字符'0X0D',实际文件长度会发生变化。
而'wb'二进制方式会使文件保持一个字符不变的写入。
'''
pickle.dump(data, output)
output.close()
def read(path):
file = open(path, 'rb') # 'rb'与wb'同理
data1 = pickle.load(file)
file.close()
if data1 == data:
return True
else:
return False
while True:
try:
write('data.pkl')
print(read('data.pkl'))
break
except:
print 'Error'
如需转载与本人联系
此博客参考自Scott_Zhang的博客