正如Cody Brocious所写,您可以一次打包整个页眉:header = struct.pack('
他还提到了endianness,如果您想打包数据以便在具有不同体系结构的机器上可靠地解包,那么endianness非常重要。格式字符串开头的<指定“使用一个小的endian约定打包此数据”。在
对于数组,您必须压缩它的长度,以确定再次读取时要解包多少个值。一次通话即可完成:
^{pr2}$
根据数组的大小,您可能会得到一个表示二进制文件的全部内容的大字符串,并且您可能需要寻找struct的替代方法,这些方法不需要将整个文件存储在内存中。在
拆箱:fmt = '
nSamples, nSampPeriod, nSampSize, nParmKind, arrSize = struct.unpack(fmt, packed)
# Use unpack_from to start reading after the packed header and count
flattened = struct.unpack_from('<%df' % arrSize, packed, struct.calcsize(fmt))
npVect = np.ndarray(flattened, dtype='float32').reshape(# your dimensions go here
)
编辑:哎呀,数组格式并没有那么简单:)总的想法是这样的:使用任何你喜欢的方法将数组展平成一个数字列表,打包数值的数量,然后打包每个值。另一方面,将数组作为一个平面列表来读取,然后对其施加任何所需的结构。在
编辑:将格式字符串更改为使用重复说明符,而不是字符串乘法。感谢约翰·麦肯指出这一点。在
编辑:添加了numpy代码,在打包之前展平数组,并在解包后重建它。在
本文介绍了如何使用Python的struct模块进行高效的数据打包和解包操作,特别是在处理不同机器体系结构之间的数据交换时。文章详细解释了如何正确设置endian约定以及如何处理数组数据的长度和结构。
1万+

被折叠的 条评论
为什么被折叠?



