1

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

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

4

1 回答 1

2

.tar.xz一个纯 Python 替代方案是使用标准库tarfile模块和liblzma包装器模块的组合来创建文件pyliblzma。这将创建与.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 文件创建进度的可能策略:

于 2012-10-30T00:14:09.527 回答