You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用glob模式结合pydrive2 fsspec批量读取CSV到Polars DataFrame

问题:如何结合fsspec与Polars通过glob模式批量读取Google Drive上的CSV文件?

本地存储schema一致的CSV文件时,可直接通过pl.read_csv('data/file_*.csv')合并为单个Polars DataFrame。但将文件存储在Google Drive(非GCS存储桶),使用pydrive2.fs的GDriveFileSystem作为fsspec文件系统时,无法直接用glob模式批量读取,只能逐个读取后拼接(示例代码如下),这种方式需要提前知晓文件数量和路径,代码不够简洁:

fs = GDriveFileSystem(ROOT_FOLDER_ID, client_id = CLIENT_ID, client_secret = CLIENT_SECRET)

dfs = []
for i in range(1, 3):
    with fs.open(f'{ROOT_FOLDER_ID}/data/file_{i}.csv', 'rb') as f:
        dfs.append(pl.read_csv(f))
df = pl.concat(dfs)

请问是否有办法结合fsspec文件系统,使用glob模式批量读取这些文件?


解决方案

方法1:利用fsspec的glob方法获取文件列表后批量读取

先通过GDriveFileSystem的glob方法匹配目标文件路径,再批量读取并合并,无需提前知道文件数量:

from pydrive2.fs import GDriveFileSystem
import polars as pl

# 初始化Google Drive文件系统
fs = GDriveFileSystem(ROOT_FOLDER_ID, client_id=CLIENT_ID, client_secret=CLIENT_SECRET)

# 用glob匹配所有目标CSV文件
target_files = fs.glob(f"{ROOT_FOLDER_ID}/data/file_*.csv")

# 批量读取文件并合并为单个DataFrame
df = pl.concat([pl.read_csv(fs.open(file_path, 'rb')) for file_path in target_files])

方法2:注册文件系统后直接用Polars的glob读取

将GDriveFileSystem注册到fsspec后,可直接在pl.read_csv中使用glob模式,借助Polars原生的批量读取能力:

from pydrive2.fs import GDriveFileSystem
import polars as pl
import fsspec

# 注册GDrive文件系统到fsspec
fsspec.register_implementation('gdrive', GDriveFileSystem)

# 初始化文件系统实例
fs = GDriveFileSystem(ROOT_FOLDER_ID, client_id=CLIENT_ID, client_secret=CLIENT_SECRET)

# 直接用glob模式读取并合并文件
df = pl.read_csv(
    f"gdrive://{ROOT_FOLDER_ID}/data/file_*.csv",
    storage_options={"fs": fs}
)

这两种方法都无需硬编码文件数量或具体文件名,代码更简洁灵活,且能自动匹配所有符合glob规则的文件。


内容的提问来源于stack exchange,提问作者Elis Evans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 22:40:01