当前位置:   article > 正文

用 Python 压缩文件方法汇总

python 压缩文件

Python 提供了几乎为所有现有压缩文件的工具,下面逐一领略。

  • zlib 是一个 Python 库,能够实现 zip 、gzip 格式文件的压缩和解压缩。

  • bz2 模块提供了对 bzip2 格式的压缩支持。它也只对单个文件起作用,因此不能归档。

  • lzma 既是算法的名称,也是 Python 模块。它可以产生比一些旧方法更高的压缩比,并且是 xz (更具体地说是 LZMA2 )背后的算法。

  • gzip 是大多数人都熟悉的应用,此外它也是一个 Python 模块的名称。此模块使用前面提到的 zlib 压缩算法,并充当类似于实用程序 gzip 和 gunzip的接口。

  • shutils 是一个模块,我们通常不把该模块与压缩和解压缩联系在一起。但它提供了处理归档文件的实用方法,便于生成 tar 、 gztar 、 zip 、 bztar 或者 xztar 这些类型的归档文件。

  • 顾名思义,zipfile 允许我们用 Python 中实现 zip 归档,提供了创建、读取、写入或追加 zip 文件所需的所有方法,还提供了便于操作这些文件的类和对象。

  • 和上面的 zipfile 类似, tarfile 这个模块用于实现 tar 归档,可以读取和写入 gzip 、bz2 和 lzma 文件或归档文件。 也支持与常规的 tar 压缩软件能实现的其他功能。

压缩与解压缩

上面列出了很多选择,它们中有一些比较基本,有一些具有许多其他功能,但共同点显然是包含压缩功能。下面就来看看有关基本操作。

先看 zlib ,这是一个相当低级的库,因此可能不太常用,让我们来看看针对整个文件的压缩或解压缩方法。

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  1. import zlib, sys
  2. filename_in = "data"
  3. filename_out = "compressed_data"
  4. with open(filename_in, mode="rb") as fin, open(filename_out, mode="wb") as fout:
  5. data = fin.read()
  6. compressed_data = zlib.compress(data, zlib.Z_BEST_COMPRESSION)
  7. print(f"Original size: {sys.getsizeof(data)}")
  8. # Original size: 1000033
  9. print(f"Compressed size: {sys.getsizeof(compressed_data)}")
  10. # Compressed size: 1024
  11. fout.write(compressed_data)
  12. with open(filename_out, mode="rb") as fin:
  13. data = fin.read()
  14. compressed_data = zlib.decompress(data)
  15. print(f"Compressed size: {sys.getsizeof(data)}")
  16. # Compressed size: 1024
  17. print(f"Decompressed size: {sys.getsizeof(compressed_data)}")
  18. # Decompressed size: 1000033

上面的代码中所需要的输入文件,可以用 head -c 1MB </dev/zero > data 指令生成,此文件由零组成且大小为 1MB 。将文件读入内存滞后,用 zlib 中的 compress 方法创建压缩数据。然后将该数据写入输出文件。

为了证明能够恢复数据——解压缩,再次打开上述生成的压缩文件并对其通过 zlib

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/746344
推荐阅读
相关标签
  

闽ICP备14008679号