通过大量试验和错误,我已经想出如何通过PyLZMA制作lzma压缩文件,但我想复制一个看似简单的任务,即将文件夹及其所有文件/目录递归压缩到7z文件。我只是通过7z.exe来做,但我似乎无法捕获进程的标准输出,直到它完成,我想要一些每7z文件的进展,因为我将压缩数百个文件夹演出超过一兆兆字节。不幸的是我无法提供我尝试过的任何代码,因为我唯一看到使用py7zlib的例子就是从预先存在的文件中提取文件。有没有人对这两者的组合有什么好运还是可以提供一些帮助?
对于它的价值,这将是在使用python 2.7的Windows上。如果在这里可能出现一些神奇的多线程,那么奖励点就会出现,特别是考虑到lzma压缩速度有多慢(但是,时间不是问题)。提前谢谢!
答案 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文件创建进度的可能策略: