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

时间:2012-10-29 22:32:55

标签: python compression 7zip lzma

通过大量试验和错误,我已经想出如何通过PyLZMA制作lzma压缩文件,但我想复制一个看似简单的任务,即将文件夹及其所有文件/目录递归压缩到7z文件。我只是通过7z.exe来做,但我似乎无法捕获进程的标准输出,直到它完成,我想要一些每7z文件的进展,因为我将压缩数百个文件夹演出超过一兆兆字节。不幸的是我无法提供我尝试过的任何代码,因为我唯一看到使用py7zlib的例子就是从预先存在的文件中提取文件。有没有人对这两者的组合有什么好运还是可以提供一些帮助?

对于它的价值,这将是在使用python 2.7的Windows上。如果在这里可能出现一些神奇的多线程,那么奖励点就会出现,特别是考虑到lzma压缩速度有多慢(但是,时间不是问题)。提前谢谢!

1 个答案:

答案 0 :(得分: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文件创建进度的可能策略: