跳转到主要内容

Python库,用于将URI作为流式文件对象打开

项目描述

omnio

Python库,用于将URI作为流式文件对象打开

此库提供了与内置Python open 函数接口非常相似的 omnio.open() 函数。不同之处在于,虽然Python的 open 仅在本地文件系统路径上操作,但 omnio 还接受URI。

它目前支持 filehttps3 URI,但将来可能扩展以支持更多的方案。

此外,它还支持使用gzip或bz2压缩和解压缩流。

功能

  • API是Python 3内置open()函数的超集
  • 基于Python 3 io 模块
  • 支持gzip和bzip2的读写
  • 使用标准库支持本地文件
  • 使用 requests 支持 HTTP
  • 使用 boto3 支持 S3

示例

读取本地二进制文件

>>> with omnio.open('example.bin', 'r') as f:
>>>     data = f.read()

读取本地文本文件

>>> with omnio.open('example.txt', 'rt') as f:
>>>     text = f.read()

从网络读取文本文件

>>> with omnio.open('https://example.com/example.txt', 'rt') as f:
>>>     text = f.read()

从网络读取压缩的文本文件,并即时解压缩

>>> with omnio.open('https://example.com/example.txt.gz', 'rtz') as f:
>>>     text = f.read()

从S3读取文本文件

>>> with omnio.open('s3://my-bucket/my-key', 'rt') as f:
>>>     text = f.read()

将1MB的随机数据写入S3,使用bzip2进行压缩

>>> import os
>>> data = os.urandom(1024**2)
>>> with omnio.open('s3://my-bucket/my-key', 'wbj') as f:
>>>     f.write(data)

将bzip2压缩的csv文件读取到数据行列表中

>>> import csv
>>> with omnio.open('data/example_data.csv.bz2', 'rtj') as f:
>>>     reader = csv.reader(f)
>>>     data = list(reader)

API

omnio.open()

顶级API提供了一个函数,该函数旨在作为omnio.open()引用。此函数API旨在尽可能模仿Python 3的内置open()函数,并且通常可以用作直接替换。

函数签名

omnio.open(uri, mode='rb', encoding=None, errors=None, newline=None)

返回值

一个类型依赖于方案和模式的文件-like对象。

参数

  • uri -- URI或本地路径。支持的URI方案包括filehttps3。本地路径可以通过普通路径字符串指定。

  • mode -- 可选字符串,指定打开文件的模式。默认为'rb',表示以二进制模式读取。支持的模式如下所述。

模式

字符 含义
'r' 打开进行读取(默认)
'w' 打开进行写入,首先截断文件
'b' 二进制模式(默认)
't' 文本模式
'z' 使用gzip压缩
'j' 使用bzip2压缩

这些字符可以组合成有效的模式。二进制模式始终是默认模式,因此某些模式指定是等效的。支持的所有模式如下所示

模式 含义
'r', 'rb' 读取字节
'rt' 读取并解码为Unicode
'rz', 'rbz' 读取,解压缩gzip为字节
'rj', 'rbj' 读取,解压缩bzip2为字节
'rtz' 读取,解压缩gzip为字节,解码为Unicode
'rtj' 读取,解压缩bzip2为字节,解码为Unicode
'w', 'wb' 写入字节
'wt' 写入Unicode,编码为字节
'wz', 'wbz' 写入字节,使用gzip压缩
'wj', 'wbj' 写入字节,使用bzip2压缩
'wtz' 写入Unicode,编码为字节,使用gzip压缩
'wtj' 写入Unicode,编码为字节,使用bzip2压缩

某些关键字参数可能只适用于某些模式。例如,encoding仅适用于't'(文本)模式。

某些方案可能不支持某些模式。例如,http方案目前不支持任何'w'(写入)模式。

omnio.glob

glob子模块旨在作为标准库glob模块的直接替换。它提供了escape()glob()iglob()函数,每个函数的签名都与原始版本匹配。

区别在于glob()iglob()可以可选地接受URI。目前,支持本地路径、file://s3:// URI。

配置

omnio.open函数接受一个可选的config参数。这允许指定方案特定的配置。

default_config()方法返回一个配置字典,其中定义了所有受支持的关键字,以及它们的默认值。

>>> import omnio
>>> omnio.default_config()
{'file': {}, 'http': {'content_iter_chunk_size': 512}, 's3': {'upload_part_size': 5242880, 'boto_client_config_args': [], 'boto_client_config_kwargs': {}}}

要指定这些参数的替代值,请创建一个默认配置,使用所需值更新字典,并将其作为关键字参数传递给omnio.open()函数。

>>> config = omnio.default_config()
>>> config["s3"]["boto_client_config_kwargs"] = {"read_timeout": 600}
>>> with omnio.open("s3://my-bucket/my-key", "rt", config=config) as fd:
    fd.read()

项目详情


下载文件

下载您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

omnio-1.3.0.tar.gz (10.0 kB 查看哈希值)

上传时间 源代码

构建发行版

omnio-1.3.0-py3-none-any.whl (13.2 kB 查看哈希值)

上传时间 Python 3

支持