You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 3.8使用lzma模块增量解压超大文件 实现xz命令等效功能

结论

可以直接使用Python标准库的lzma模块实现需求,无需调用外部xz二进制文件,也不会将整个文件加载到内存中。

实现方案

方案1:使用lzma.open(最简写法)

lzma.open默认封装了流式处理逻辑,你只需要按固定块大小读写即可,内存占用仅和你设置的块大小有关,和源文件总大小无关:

import lzma

# 可根据实际情况调整块大小,推荐1~4MB即可
CHUNK_SIZE = 1 * 1024 * 1024

with lzma.open("hugefile.xz", "rb") as f_in, open("hugefile.out", "wb") as f_out:
    while chunk := f_in.read(CHUNK_SIZE):
        f_out.write(chunk)

方案2:手动使用LZMADecompressor(可控性更高)

你之前对LZMADecompressor的理解存在偏差:它并不会将所有解压结果累积在内存中,内部仅保留解压必要的状态数据,每次调用decompress传入一块压缩数据,只会返回当前块可解压出的未压缩数据,完全支持增量处理:

import lzma

CHUNK_SIZE = 1 * 1024 * 1024

decompressor = lzma.LZMADecompressor()
with open("hugefile.xz", "rb") as f_in, open("hugefile.out", "wb") as f_out:
    while chunk := f_in.read(CHUNK_SIZE):
        uncompressed_data = decompressor.decompress(chunk)
        f_out.write(uncompressed_data)
    # 处理最后残留的缓冲数据
    if not decompressor.eof:
        uncompressed_data = decompressor.flush()
        f_out.write(uncompressed_data)

两种方案都可以稳定处理体积超过内存容量的大文件,和你给出的xz命令效果完全等效。

内容的提问来源于stack exchange,提问作者ThePythonicCow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 07:51:03