7.3 二进制文件操作案例

      数据库文件、图像文件、可执行文件、音频文件、Office 文档等均属于二进制文件。Python 中常用的序列化模块有 struct、pickle、json、marshal 和 shelve。

7.3.1 使用 pickle 模块

(1)使用 pickle 模块写入二进制文件

import pickle

f = open('sample_pickle.dat', 'wb')
n = 7
i = 13000000
a = 99.056
s = '中华人民共和国 123abc'
lst = [[1, 2, 3], [4, 5, 6]]
tu = (-5, 10, 8)
coll = {4, 5, 6}
dic = {'a':'apple', 'b':'banana', 'g':'grape', 'o':'orange'}

try:
    pickle.dump(n, f)
    pickle.dump(i, f)
    pickle.dump(a, f)
    pickle.dump(s, f)
    pickle.dump(lst, f)
    pickle.dump(tu, f)
    pickle.dump(coll, f)
    pickle.dump(dic, f)
except:
    print('写文件异常')
finally:
    f.close()

(2)读取刚才写入的二进制文件。

import pickle

f = open('sample_pickle.dat', 'rb')
n = pickle.load(f)
i = 0
while i < n:
    x = pickle.load(f)
    print(x)
    i = i + 1
f.close()

7.3.2 使用 struct 模块

(1)使用 struct 模块写入二进制文件。

import struct

n = 12000000
x = 98.12
b = True
s = 'a1@ 中国'
sn = struct.pack('if?', n, x, b)
f = open('sample_struct.dat', 'wb')
f.write(sn)
f.write(s.encode())
f.close()

(2)使用 struct 模块读取刚才的二进制文件。

import struct

f = open('sample_struct.dat', 'rb')
sn = f.read(9)
tu = struct.unpack('if?', sn)
print(tu)
n, x, b = tu
print('n = ', n,' x = ', x, ' b = ', b)
s = f.read(9)
s = s.decode('utf-8', 'ignore') # 
print('s = ', s)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容