【问题标题】:Compress a folder recursively as 7z with PyLZMA and py7zlib使用 PyLZMA 和 py7zlib 将文件夹递归压缩为 7z
【发布时间】:2024-01-09 03:12:01
【问题描述】:

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

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

【问题讨论】:

    标签: python compression 7zip 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 文件创建进度的可能策略:

    【讨论】:

      最近更新 更多