Python_Cookbook_3rd_Edition
6.12。读取嵌套和可变大小的二进制文件结构
import struct
import itertools
def write_polys(filename, polys):
# Determine bounding box
flattened = list(itertools.chain(*polys))
min_x = min(x for x, y in flattened)
max_x = max(x for x, y in flattened)
min_y = min(y for x, y in flattened)
max_y = max(y for x, y in flattened)
with open(filename, 'wb') as f:
f.write(struct.pack('<iddddi', 0x1234,
min_x, min_y,
max_x, max_y,
len(polys)))
for poly in polys:
size = len(poly) * struct.calcsize('<dd')
f.write(struct.pack('<i', size + 4))
for pt in poly:
f.write(struct.pack('<dd', *pt))
为什么使用f.write(struct.pack('<i', size + 4)) size+4
?
我认为f.write(struct.pack('<i', size))
还可以
在代码正上方的书中,它显示了多边形记录的编码方式。第一个字段是int
,其值为“记录长度,包括长度(N个字节)”。由于此记录长度写为4字节i
整数,因此4
被添加到构成多边形的所有点(X,Y坐标对)的size
上。