0

我有一个文本文件(以 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)

4

1 回答 1

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
于 2013-09-12T09:55:41.583 回答