- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个二进制文件,其中包含 4 字节二进制值,每个值表示一组两个 short int
。我知道我可以将单个 4 字节二进制值解压缩为两个短整数,如下所示:
from struct import unpack
fval = b'\xba\x1e\x99\x01' #actualy read from some file
qualdip, azi = unpack('hh', fval)
print(type(qualdip), qualdip)
print(type(azi), azi)
>>> <class 'int'> 7866
>>> <class 'int'> 409
现在,我想解压整个缓冲区。目前我正在做:
qualdips = []
azis = []
with open(bfile, 'rb') as buf:
fval = buf.read(4)
while fval:
qualdip, azi = unpack('hh', fval)
azis.append(azi)
qualdips.append(qualdip)
fval = buf.read(4)
对于 277MB 的文件来说,这需要一分钟多的时间,并且似乎会产生巨大的内存开销。
我想将整个文件缓冲区直接解压到两个变量中。我该如何实现这个目标?
我怀疑struct.unpack_from
是我的 friend ,但我不确定如何制定格式。
with open(bfile, 'rb') as buf:
qualdip, azi = unpack_from('hh', buf)
仅提取两个值,并且(我知道文件的元素数量)
with open(bfile, 'rb') as buf:
qualdip, azi = unpack_from('72457091h72457091h', buf)
期望输出变量的数量如此荒谬。所以:
如何将整个文件缓冲区直接解压到两个变量中?
最佳答案
我不知道如何将值直接解包到两个列表中,但您可以将整个文件解包到一个元组中,然后将其切成两部分:
fval = b'\xba\x1e\x99\x01' * 3
unpacked= unpack('3h3h', fval)
qualdip = unpacked[0::2]
azi = unpacked[1::2]
或者,使用 islice
创建 iterator ,这将减少内存消耗。
qualdip = islice(unpacked, 0, None, 2)
azi = islice(unpacked, 1, None, 2)
关于python - 如何将二进制文件缓冲区解包为两个变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38507704/
我正在尝试生成使用 Flutter 制作的应用程序的存档(IPA 文件)。我正在遵循官方指南:Preparing an iOS app for release: Create a build arch
在下面的示例中,我尝试为四个“功率”级别绘制“排放”与“电压”的箱线图,每个功率级别占据一个子图。 fig = plt.figure(figsize=(16,9)) i = 0 for Power i
我正在尝试使用 sankeyNetwork() 绘制桑基图在 networkD3 包中。 sankeyNetwork(Links = Flow_data, Nodes = Nodes_data,
作为 python 的新手,我第一次使用一些导入设置 Rodeo: import sys import pandas as pd import pylab as pl import numpy as
我正在致力于将测试从 webdriver 和 java 移植到 webdriverjs,我想知道是否有人可以帮助我理解为什么这样做: driver.get('http://www.google.com
我是一名优秀的程序员,十分优秀!