Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python - What is the most efficient way to generate padding?

Tags:

python

padding

Here's the problem: I'm reading binary files in fairly large blocks (512 KiB) and wish to pad the last block with zeros whenever it is shorter than the block size.

Currently, I'm doing something like this:

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)])

Obviously this is terribly inefficient since that reduce will make a lot of string concatenations. I'm wondering though, how can I achieve this with Python? In C, I'd simply calloc and be done with it.

If it isn't achievable with Python, I'm willing to convert this code into a C module and/or abandon Python entirely for this project, since it's still on the early stages.

Cheers!

EDIT: I'm feeling terrible for not remembering to use the * operator. :-)

This solution worked perfectly for me:

bytes += "\0" * len_diff

EDIT #2: Using ljust() instead simplified my code a bit, so the correct answer goes to Jeff.

like image 274
João Neves Avatar asked Apr 24 '11 22:04

João Neves


2 Answers

Couldn't you just use ljust() to do the padding since we're dealing with string objects here?

bytes = f.read(self.chunksize)
if bytes:
    bytes = bytes.ljust(self.chunksize, '\0')
like image 72
Jeff Mercado Avatar answered Sep 27 '22 23:09

Jeff Mercado


bytes += "\0"*len_diff 

should help

like image 25
John La Rooy Avatar answered Sep 28 '22 00:09

John La Rooy