使用 PyLZMA 和 py7zlib 将文件夹递归压缩为 7z

Posted

技术标签:

【中文标题】使用 PyLZMA 和 py7zlib 将文件夹递归压缩为 7z【英文标题】:Compress a folder recursively as 7z with PyLZMA and py7zlib 【发布时间】:2012-10-29 22:32:54 【问题描述】:

经过反复试验,我已经弄清楚如何通过 PyLZMA 制作 lzma 压缩文件,但我想复制看似简单的任务,即递归地压缩文件夹及其所有文件/目录到 7z 文件.我会通过 7z.exe 来完成,但在完成之前我似乎无法捕捉到进程的标准输出,我想要一些每 7z 文件的进度,因为我将压缩范围从数百个的文件夹超过 1 TB 的演出。不幸的是,我无法提供我尝试过的任何代码,仅仅是因为我看到的使用 py7zlib 的唯一示例是从预先存在的文件中提取文件。有没有人对这两者的结合有任何运气或可以提供一些帮助?

对于它的价值,这将是在使用 python 2.7 的 Windows 上。如果这里可能发生一些神奇的多线程,特别是考虑到 lzma 压缩似乎有多慢(然而,时间在这里不是问题),则可以加分。提前致谢!

【问题讨论】:

【参考方案1】:

纯 Python 替代方法是使用标准库 tarfile 模块和 liblzma 包装器模块 pyliblzma 的组合创建 .tar.xz 文件。这将创建大小与.7z 档案相当的文件:

import tarfile
import lzma

TAR_XZ_FILENAME = 'archive.tar.xz'
DIRECTORY_NAME = '/usr/share/doc/'

xz_file = lzma.LZMAFile(TAR_XZ_FILENAME, mode='w')

with tarfile.open(mode='w', fileobj=xz_file) as tar_xz_file:
    tar_xz_file.add(DIRECTORY_NAME)

xz_file.close()

棘手的部分是进度报告。上面的示例对 tarfile.TarFile 类的目录使用递归模式,因此在添加整个目录之前,add 方法不会返回。

以下问题讨论了监控 tar 文件创建进度的可能策略:

Python tarfile progress output? Python tarfile progress

【讨论】:

以上是关于使用 PyLZMA 和 py7zlib 将文件夹递归压缩为 7z的主要内容,如果未能解决你的问题,请参考以下文章

如何读取用 7z 压缩的文本文件?

如何将 JSON 对象从快递服务器发送到下一个 js 页面?

Uva1635 二项式递推+质因子分解+整数因子分解

常见算法思想2:递推法

数列递推算法的原理

nodejs问题将graphql上传文件发送到服务