使用 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的主要内容,如果未能解决你的问题,请参考以下文章