跳转到主要内容

适配生成器和其它可迭代对象到文件接口

项目描述

iterable-io

Status Version Python

iterable-io 是一个小的Python库,它提供了一个适配器,使得可以从 可迭代 对象中以类似于 文件对象 的方式读取。

它主要用于连接两个不兼容的接口之间的“胶水”。例如,在一个接口期望调用 .read() 的文件对象,而另一个仅提供字节生成器的情况下。

解决此问题的一种方法是将生成器中的所有字节写入临时文件,然后提供该文件,但如果生成器产生大量数据,这将是启动缓慢且资源消耗大的。

此库允许在这两个不兼容的接口之间流式传输数据,因此当请求 .read() 时,它会从可迭代对象中提取数据。这保持了资源使用率低,并消除了启动延迟。

安装

pip install iterable-io

文档

此库的功能通过一个单独的函数 open_iterable() 来访问。

open_iterable() 被设计成与内置的 open() 以相同的方式工作,除了它接收一个可迭代对象而不是文件来“打开”。例如,它可以以二进制或文本模式打开可迭代对象,有缓冲、编码等选项。有关更详细的文档,请参阅 open_iterable 的文档字符串。

简单示例

以下示例应该足以了解在哪些情况下 open_iterable() 会很有用,并大致了解如何使用它。

从字节生成器中读取字节

gen = generate_bytes()

# adapt the generator to a file-like object in binary mode
# (fp.read() will return bytes)
fp = open_iterable(gen, "rb")

while chunk := fp.read(4096):
    process_chunk(chunk)

从字节生成器中读取文本行

gen = generate_bytes()

# adapt the generator to a file-like object in text mode
# (fp.read() will return a string, fp.readline is also available)
fp = open_iterable(gen, "rt", encoding="utf-8")

for line in fp:
    process_line_of_text(line)

测试

此包包含广泛的测试。要运行它们,请安装 pytestpip install pytest)然后在项目目录中运行 py.test

许可证

遵循 GNU LGPLv3 许可。

项目详情


下载文件

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

源分发

iterable-io-1.0.0.tar.gz (6.0 kB 查看哈希值

上传时间

构建分发

iterable_io-1.0.0-py3-none-any.whl (4.9 kB 查看哈希值

上传时间 Python 3