跳转到主要内容

从远程文件URL创建文件-like对象,针对h5py使用进行了优化。

项目描述

remfile

latest-release tests codecov

提供了一种用于通过HTTP读取远程文件的文件-like对象,针对h5py使用进行了优化。

示例用法

# See examples/example1.py

import h5py
import remfile

url = 'https://dandiarchive.s3.amazonaws.com/blobs/d86/055/d8605573-4639-4b99-a6d9-e0ac13f9a7df'

file = remfile.File(url)

with h5py.File(file, 'r') as f:
    print(f['/'].keys())

有关更完整的示例,请参阅 examples/example1.py

注意:url可以是字符串或具有get_url()方法的对象。如果url是过期时间特定的预签名AWS URL,则后者很有用。但是,如果您实现自己的get_url()方法,请确保仅在必要时更新签名的URL。

安装

pip install remfile

为什么?

读取远程hdf5文件的传统方式是使用fsspec库,如examples/example1_compare_fsspec.py所示。然而,这种方法在经验上比使用remfile慢得多。我不熟悉fsspec的内部工作原理,但它似乎没有针对读取hdf5文件进行优化。高效访问远程hdf5文件需要读取小块数据以获取元信息,然后读取大块数据以及并行化以获取较大的数据数组。

在示例目录中查看remfile与fsspec之间的时间比较。

此外,由于url可以是具有get_url()方法的对象,因此可以在需要更新预签名URL的上下文中使用remfile。如上所述,如果您实现自己的get_url()方法,请确保仅在必要时更新签名的URL。

如何?

创建了一个文件-like对象,它使用requests库以块的形式读取远程文件。默认块大小相对较小,但当remfile检测到正在访问大数据数组时,它会自适应地切换到较大的块大小。对于非常大的数据数组,系统将使用多个线程并行读取数据。

磁盘缓存

以下示例展示了如何使用磁盘缓存。请注意,这并不是一个LRU缓存,因此没有清理操作。缓存将一直增长,直到磁盘空间用尽。因此,当您完成时,您负责删除目录。

import remfile

url = 'https://dandiarchive.s3.amazonaws.com/blobs/d86/055/d8605573-4639-4b99-a6d9-e0ac13f9a7df'

cache_dirname = '/tmp/remfile_test_cache'
disk_cache = remfile.DiskCache(cache_dirname)

file = remfile.File(url, disk_cache=disk_cache)

with h5py.File(file, 'r') as f:
    print(f['/'].keys())

注意事项

这个库并非旨在成为读取远程文件的一般用途库。它针对读取hdf5文件进行了优化。

与fsspec方法的比较

参见pynwb_streaming_benchmark

许可证

Apache 2.0

作者

Jeremy Magland,计算数学中心,Flatiron研究所

项目详情


下载文件

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

源分发

remfile-0.1.13.tar.gz (13.3 kB 查看散列)

上传时间

构建分发

remfile-0.1.13-py3-none-any.whl (11.9 kB 查看散列)

上传时间 Python 3

由以下赞助

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面