gpt4 book ai didi

python - 从文件中每 4 个字节读取 3 个字节到 bytearray

转载 作者:太空宇宙 更新时间:2023-11-04 09:40:52 30 4
gpt4 key购买 nike

我是 python 的新手。我目前正在将文件的内容读入字节数组,如下所示:

self.palette = bytearray(fp.read(paletteSize*4))

我不需要读取所有数据,而是需要执行以下操作:

palette[0] = fp.read(1)
palette[1] = fp.read(1)
palette[2] = fp.read(1)
fp.read(1) #throw a byte away
palette[3] = fp.read(1)
# etc thru paletteSize * 4 bytes, resulting in a size * 3 array

基本上,我需要丢弃每 4 个字节并将剩余字节打包到一个大小为 3/4 的数组中。

执行此操作的最佳方法是什么,该方法既性能最佳又代码最简洁?我知道我可以像上面那样在范围内使用 for 循环手动执行此操作,但这看起来真的很难看,并且在 python 中而不是在 native C 代码中涉及大量内存副本。

我问的原因:这是 micropython,文件可能有点大(4+ KB),因此节省 25% 很重要。

剧透警报:我正在读取位图文件的调色板部分,它被编码为蓝色、绿色、红色和 0x00 的四个字节元组 - 每个调色板条目的第 4 个字节是无用数据。

最佳答案

因为您已经有了调色板大小,您可以为它预分配内存,以节省一些在向字节数组添加数据时扩展字节数组的开销。使用循环一次读取 3 个字节并执行 seek 以跳过 1 个字节:

palette = bytearray(paletteSize * 3)
for i in range(paletteSize):
palette[i * 3: (i + 1) * 3] = fp.read(3)
fp.seek(1, 1)

关于python - 从文件中每 4 个字节读取 3 个字节到 bytearray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51778202/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com