如何读取路径含空格的GCS Parquet文件到Polars DataFrame?
解决Polars读取GCS带空格路径Parquet文件的404问题
问题出在你手动生成URI时对路径做了URL编码(将空格转为%20),而GCS存储的对象名称是原始带空格的字符串,编码后的路径会被识别为完全不同的对象路径,导致找不到文件。以下是两种可行的解决方法:
方法一:直接用Blob原始名称构建GS路径
放弃自己截取file.id拼接URI的方式,利用blob.name获取原始未编码的对象名称,直接构建符合要求的GS路径:
from google.cloud import storage import polars as pl # 初始化GCS客户端与存储桶 client = storage.Client() bucket = client.get_bucket("bucketname") # 遍历桶内文件并读取 for blob in bucket.list_blobs(): # 用原始名称构建路径,保留空格 gs_path = f"gs://{bucket.name}/{blob.name}" # Polars底层的gcsfs会自动处理空格编码,直接读取即可 df = pl.read_parquet(gs_path) # 后续数据处理逻辑
方法二:显式使用gcsfs读取文件流
如果需要更精细的存储控制,可以直接用gcsfs库打开文件流,再传给Polars读取:
import gcsfs import polars as pl # 初始化GCS文件系统 fs = gcsfs.GCSFileSystem() # 直接使用带空格的原始路径 file_path = "gs://bucketname/long_path/a_key=a_value/another_key=something_pre_space something_after_a_space/0.parquet" with fs.open(file_path, "rb") as f: df = pl.read_parquet(f)
错误原因说明
你通过file.id截取的对象路径已经是URL编码后的格式(空格变为%20),但GCS中存储的对象名称是原始的带空格字符串,编码后的路径会被GCS判定为不存在的对象,因此返回404错误。Polars依赖的gcsfs库会自动处理路径中的特殊字符编码,无需手动转换。
内容的提问来源于stack exchange,提问作者blake s
相关产品推荐
相关产品推荐

