Python烹饪书第三版6.12一个问题
Python食谱第三版 6.12。读取嵌套和可变大小的二进制文件 结构Python烹饪书第三版6.12一个问题,python,python-3.x,cookbook,Python,Python 3.x,Cookbook,Python食谱第三版 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 fl
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))
导入结构
进口itertools
def write_polys(文件名,polys):
#确定边界框
展平=列表(itertools.chain(*polys))
最小值x=最小值(x表示x,y表示展平)
max_x=max(x表示x,y表示展平)
min_y=min(y表示x,y表示展平)
max_y=max(y表示x,y表示展平)
将open(filename,'wb')作为f:
f、 write(struct.pack)(“在代码前面的图中,它显示了多边形记录的编码方式。第一个字段是一个int
,其值为“记录长度包括长度(N字节)”。由于此记录长度是以4字节的i
整数写入的,因此将4
添加到构成多边形的所有点(X,Y坐标对)的大小中。请分享目标,分享问题是不够的。但是如果我将代码更改为“f.write(struct.pack(“这是因为read_polys()
函数中的代码几乎紧跟在write_polys()
之后,当它被读回时,将读取的长度值pbytes
除以16
,所以你的判断是正确的,这并不重要。不过,后面还有另一个read_polys()
函数(第212页)在同一节中,它使用名为SizedRecord.from_file()
的类方法实用程序读取多边形,并且它具有关键字参数includes_size=True
。该函数以不同的方式读取数据,读取方式可能与是否使用+4
有关。