mcpField
P
pooch

pooch

github.com/steadfastasart数据与数据库7363 次安装6 周前更新
代码仓库

关于 pooch

Pooch 是用于获取和管理数据文件的 Python 库,尤其适合可复现的科学工作流。它结合缓存、哈希完整性校验、注册表管理和归档处理。

主要功能

  1. 01下载文件并缓存
  2. 02使用哈希校验文件
  3. 03管理数据注册表
  4. 04提取和解压归档文件
  5. 05使用操作系统专属缓存目录

适用场景

  1. 01可复现地获取数据集
  2. 02校验下载的科学数据
  3. 03与协作者共享文件注册表
  4. 04下载并解包归档文件

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/steadfastasart/geoscience-skills --skill pooch

安装后在 Claude Code 中输入/pooch确认已加载。

附带文件references/registry.mdscripts/create_registry.py

详细介绍

Pooch - 数据文件获取

快速参考

import pooch

# Download single file
file_path = pooch.retrieve(
    url="https://example.com/data.csv",
    known_hash="sha256:abc123...",  # None to skip verification
    fname="data.csv",
    path=pooch.os_cache("myproject")
)

# Create registry for multiple files
REGISTRY = pooch.create(
    path=pooch.os_cache("myproject"),
    base_url="https://example.com/data/",
    registry={"data.csv": "sha256:abc123...", "model.nc": "sha256:def456..."}
)
data_file = REGISTRY.fetch("data.csv")

# Generate hash for local file
file_hash = pooch.file_hash("/path/to/file.csv")

主要函数

函数用途
pooch.retrieve()下载单个文件并缓存
pooch.create()创建自定义数据注册表
pooch.file_hash()生成文件的 SHA256/MD5 哈希值
pooch.os_cache()获取操作系统专用的缓存目录

基本操作

下载文件
# With hash verification
file_path = pooch.retrieve(
    url="https://example.com/data.nc",
    known_hash="sha256:abc123..."
)

# Without verification (development only)
file_path = pooch.retrieve(url="https://example.com/data.nc", known_hash=None)

# From Zenodo DOI
file_path = pooch.retrieve(
    url="doi:10.5281/zenodo.1234567/data.zip",
    known_hash="sha256:abc123..."
)
解压归档文件
# ZIP archive
files = pooch.retrieve(
    url="https://example.com/data.zip",
    known_hash="sha256:abc123...",
    processor=pooch.Unzip()
)

# Decompress single gzip file
file_path = pooch.retrieve(
    url="https://example.com/data.csv.gz",
    known_hash="sha256:abc123...",
    processor=pooch.Decompress(name="data.csv")
)
其他选项
# Progress bar for large downloads
file_path = pooch.retrieve(url=url, known_hash=hash, progressbar=True)

# HTTP authentication
file_path = pooch.retrieve(
    url="https://example.com/protected/data.csv",
    known_hash=None,
    downloader=pooch.HTTPDownloader(auth=("user", "pass"))
)

处理器选项

处理器用途
Unzip()解压 ZIP 归档文件
Untar()解压 TAR/TAR.GZ 归档文件
Decompress()解压 gzip、bz2、lzma、xz 文件

缓存位置

操作系统默认路径
Linux~/.cache/<project>
macOS~/Library/Caches/<project>
WindowsC:\Users\<user>\AppData\Local\<project>\Cache

错误处理

try:
    file_path = pooch.retrieve(url=url, known_hash=hash)
except pooch.exceptions.HTTPDownloadError:
    print("Download failed - check URL")
except pooch.exceptions.DownloadError:
    print("Network issue")

与替代方案的适用场景对比

工具最适合的场景局限性
pooch可复现的数据下载、哈希校验、缓存不是版本控制系统
urllib/requests简单的一次性下载、自定义 HTTP 逻辑不支持缓存和哈希校验
DVC与 git 配合进行数据版本控制设置较复杂,需要远程存储
wget快速命令行下载不支持 Python 集成,也没有缓存逻辑

在以下情况下使用 pooch: 你需要可复现的数据下载,并进行自动缓存和完整性校验,尤其适用于科学数据注册表。

在以下情况下考虑替代方案: 你需要与 git 集成的完整数据版本控制(使用 DVC)、无需缓存的简单一次性下载(使用 requests),或命令行批量下载(使用 wget)。

常见工作流

使用注册表设置可复现的数据下载
  • 确定所有必需数据文件及其 URL
  • 使用 pooch.file_hash() 为每个文件生成 SHA256 哈希值
  • 使用 pooch.create() 创建注册表,并指定基础 URL 和文件哈希值
  • 在分析脚本中使用 REGISTRY.fetch() 获取文件
  • 为压缩文件添加处理器(Unzip()、Untar()、Decompress())
  • 清除缓存并重新获取文件,以测试注册表
  • 在项目 README 中记录注册表信息,供协作者参考

参考资料

脚本

评论

支持 Markdown