当前位置:   article > 正文

Python压缩、减压7z文件_py7zr

py7zr

py7zr简介

py7zr 是一个由Python编程语言编写的7zip存档压缩、解压缩、加密和解密的库和实用程序。要求的最低版本是Python 3.6。

支持的算法:

  • compress
    • LZMA2
    • LZMA
    • Bzip2
    • Deflate
    • Copy
    • ZStandard
    • Brotli
    • Deflate64 (Decompression only)
    • PPMd (Experimental)
  • crypt
    • 7zAES
  • Filters
    • Delta
    • BCJ(X86,ARMT,ARM,PPC,SPARC,IA64)

安装

可以直接使用pip进行安装py7zr:

 pip install py7zr
  • 1

或者使用conda:

conda install -c conda-forge py7zr
  • 1

解压文件

下面是一段代码片段,介绍如何解压文档中的一些文件:

import py7zr

archive = py7zr.SevenZipFile('sample.7z', mode='r')
archive.extractall(path="/tmp")
archive.close()
  • 1
  • 2
  • 3
  • 4
  • 5

py7zr (v0.6及更高版本) 也提供了上下文管理,所以可以使用 with 代码块:

import py7zr

with py7zr.SevenZipFile('sample.7z', mode='r') as z:
    z.extractall()

with py7zr.SevenZipFile('target.7z', 'w') as z:
    z.writeall('./base_dir')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

py7zr 还支持提取单个或通过 extract(targets=[‘file path’]) 选定的多个文件。注意:如果只指定文件而不指定父目录,将会提取失败。

import py7zr
import re

filter_pattern = re.compile(r'<your/target/file_and_directories/regex/expression>')
with SevenZipFile('archive.7z', 'r') as archive:
    allfiles = archive.getnames()
    selective_files = [f for f in allfiles if filter_pattern.match(f)]
    archive.extract(targets=selective_files)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

py7zr(v0.6及更高版本)支持提取受密码保护的归档文件。

import py7zr

with py7zr.SevenZipFile('encrypted.7z', mode='r', password='secret') as z:
    z.extractall()
  • 1
  • 2
  • 3
  • 4

压缩、归档

下面是一段如何生成归档文件的事例代码。

import py7zr

with py7zr.SevenZipFile('target.7z', 'w') as archive:
    archive.writeall('/path/to/base_dir', 'base')
  • 1
  • 2
  • 3
  • 4

要创建加密存档,请传递密码。

import py7zr

with py7zr.SevenZipFile('target.7z', 'w', password='secret') as archive:
    archive.writeall('/path/to/base_dir', 'base')
  • 1
  • 2
  • 3
  • 4

要使用zstandard等算法创建存档,可以使用自定义过滤器调用。

import py7zr

my_filters = [{"id": py7zr.FILTER_ZSTD}]
another_filters = [{"id": py7zr.FILTER_ARM}, {"id": py7zr.FILTER_LZMA2, "preset": 7}]
with py7zr.SevenZipFile('target.7z', 'w', filters=my_filter) as archive:
    archive.writeall('/path/to/base_dir', 'base')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/746303
推荐阅读
相关标签
  

闽ICP备14008679号