xopen 一个高效压缩和解压缩python库碾压gzip
2024-01-09 16:33:14
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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!