xopen 一个高效压缩和解压缩python库碾压gzip

发布时间:2024年01月09日

xopen库介绍

xopen这个Python模块提供了一个xopen函数,它的工作方式类似于内置的open函数,而且可以透明地处理压缩文件。支持的压缩格式目前是gzip, bzip2, xz和可选的Zstandard。

Xopen选择最有效的方法来读取或写入压缩文件。对于gzip文件,如果支持的话,使用python-isal库的线程方法。另外,还可以打开管道,使用外部工具,例如pigz,它是gzip的并行版本。

如果将threads=0传递给xopen(),则不使用外部进程。对于gzip文件,如果安装了python-isal(绑定isa-l),就会使用它(因为python-isal是xopen的依赖,所以应该总是这样)。Python -isal不支持大于3的压缩级别,因此如果没有可用的外部工具或线程设置为0,则使用Python内置的gzip。使用Open。

对于xz文件,使用到xz程序的管道,因为它内置了对多线程压缩的支持。

对于bz2文件,使用pbzip2(并行bzip2)。

如果其他方法都不能使用,xopen将返回到Python的内置函数(gzip.open, lzma.open, bz2.open)。

如果可以识别扩展名(.gz、。bz2、。xz或。zst),则使用的文件格式由文件名决定。在读取没有识别的文件扩展名的文件时,xopen试图通过读取文件的前几个字节来检测格式。xopen兼容Python 3.8及更高版本。

使用方法

读取文件

# Open a file for reading:

from xopen import xopen

with xopen("file.txt.gz") as f:
    content = f.read()

写入文件

#Write to a file in binary mode, set the compression level and avoid using an external process:

from xopen import xopen

with xopen("file.txt.xz", mode="wb", threads=0, compresslevel=3) as f:
    f.write(b"Hello")

最新版的xopen使用 isal.igzip_threaded 模块,而不是利用管道从外部程序获取数据。这使得使用线程读写gzip文件更加高效。

文章来源:https://blog.csdn.net/qq_36608036/article/details/135481501
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。