Python库,用于将URI作为流式文件对象打开
项目描述
omnio
Python库,用于将URI作为流式文件对象打开
此库提供了与内置Python open
函数接口非常相似的 omnio.open()
函数。不同之处在于,虽然Python的 open
仅在本地文件系统路径上操作,但 omnio
还接受URI。
它目前支持 file
、http
和 s3
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方案包括
file
、http
和s3
。本地路径可以通过普通路径字符串指定。 -
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 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8cb59123f3ed9c86179e26d63d3c5c33918a8e3498516ff7821336a64fdcf10b |
|
MD5 | aecb5e79e05d07ec54a4085d0d543da9 |
|
BLAKE2b-256 | ef3ba9e49748ae526750e278a8c494acb3458aac05dde67d2044d9063c25752c |
omnio-1.3.0-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3251a572a43437077f2b3a4003b9da5e031dd57e185c7f187467de80ffa6032b |
|
MD5 | 2e141d6397779c58f3e3cea34795b3f1 |
|
BLAKE2b-256 | e8a98e495e002669563596d44b8f6fcaeeb414a4e87ce7980dea98e87d4edcde |