我有一个文本文件(以MB为单位),我想把它分成块(以KB为单位)。我正在模拟网络上的文件传输行为。到目前为止,我能够根据用户输入的行数(由'\ n'分隔)制作块,如此
def make_chunks(fname):
ifile = file(fname,'rb')
file_iter = iter(ifile)
args = [file_iter] * 10 # No of lines you want to have in one chunk
chunks = list(izip_longest(fillvalue = None, *args))
但是这些块现在有不同的大小。我如何制作相同大小的块(比如4KB)
答案 0 :(得分:6)
您可以通过实际的字节大小来填充:
def chunk(fname):
with open(fname, 'rb') as fin:
return list(iter(lambda: fin.read(4096), ''))
请注意,您也可以yield
每个块而不是构建列表,并让调用者决定是否要构建列表。
for chunk in iter(lambda: fin.read(4096), ''):
yield chunk