Python - 最有效的生成填充方式是什么?

15 投票
5 回答
37053 浏览
提问于 2025-04-16 16:21

这是个问题:我在读取二进制文件时,一次读取比较大的块(512 KiB),但如果最后一块数据少于这个块的大小,我希望用零来填充它。

目前,我是这样做的:

bytes = f.read(self.chunksize)
if len(bytes) > 0:
    len_diff = self.chunksize - len(bytes)
    if len_diff > 0:
        bytes += reduce(lambda x,y: x+y, ["\0" for i in range(0, len_diff)])

显然,这种做法效率很低,因为这样会产生很多字符串拼接。我在想,怎么用Python来实现这个功能?在C语言中,我只需要用calloc就可以搞定。

如果Python做不到,我也愿意把这段代码转换成C模块,或者干脆放弃Python,因为这个项目还处于早期阶段。

谢谢!

编辑:我觉得很糟糕,居然忘了用 * 操作符。:-)

这个解决方案对我来说非常有效:

bytes += "\0" * len_diff

编辑 #2:使用ljust()方法让我代码简化了一些,所以正确答案归Jeff。

5 个回答

2

试试这个。

bytes = "\0" * self.chunksize
rbytes = f.read(self.chunksize)
bytes[:len(rbytes)] = rbytes

或者

bytes = f.read(self.chunksize)
bytes += "\0" * (self.chunksize - len(bytes))
6
bytes += "\0"*len_diff 

应该能帮到你

32

因为你在处理字符串,所以可以使用 ljust() 这个方法来进行填充。

readBytes = f.read(self.chunksize)
if readBytes:
    readBytes = readBytes.ljust(self.chunksize, b'\0')

撰写回答