用 Python 读取内存中的 .7z 文件,并将每一行作为流处理

问题描述 投票:0回答:1

我正在处理一个巨大的 .7z 文件,我需要逐行处理它。

首先我尝试了

py7zr
,但它只能通过首先将整个文件解压缩到一个对象中来工作。这会耗尽内存。

然后

libarchive
能够逐块读取,但是没有直接的方法将这些二进制块拆分成行。

我能做什么?

我先研究的相关问题:

我正在寻找方法来改进我自己构建的临时解决方案 - 在此处作为答案发布。谢谢!

python string 7zip in-memory libarchive
1个回答
0
投票

此解决方案遍历所有可用的

get_blocks()
。如果最后一行没有以
\n
结尾,我们将剩余的字节保留为下一个块中的
yield

import libarchive

def process(my_file):
    data = ''
    with libarchive.file_reader(my_file) as e:
        for entry in e:
            for block in entry.get_blocks():
                data += block.decode('ISO-8859-1')
                lines = data.splitlines()
                if not data.endswith('\n'):
                    data = lines.pop()
                else:
                    data = ''
                for line in lines:
                    yield ({'l': line},)
© www.soinside.com 2019 - 2024. All rights reserved.