如何获取GCS指定文件夹下的gsutil URI列表并合并为Pandas数据框
解决GCS路径空格导致Pandas读取失败的问题
别自己拆字符串生成URI了,直接用GCS Python客户端库的Blob属性生成标准的gs://格式路径,完美解决空格问题。
先装依赖(如果没装的话)
pip install google-cloud-storage
完整代码示例
from google.cloud import storage import pandas as pd # 初始化GCS客户端 client = storage.Client() # 配置你的存储桶和目标文件夹 bucket_name = "my_data" # 注意前缀末尾要加斜杠,确保只抓取ABC/WW3下面的文件 target_folder_prefix = "ABC/WW3/" # 获取存储桶对象 bucket = client.get_bucket(bucket_name) # 列出目标文件夹下的所有文件Blob(排除模拟文件夹的空Blob) blobs = bucket.list_blobs(prefix=target_folder_prefix) gs_uris = [] for blob in blobs: # 跳过GCS里用来模拟文件夹的空对象 if not blob.name.endswith('/'): # 直接拼接合法的gs:// URI,Blob的name属性已正确保留空格 gs_uri = f"gs://{bucket_name}/{blob.name}" gs_uris.append(gs_uri) # 读取并合并所有文件 dfs = [] for uri in gs_uris: # 根据你的文件类型替换对应的read方法,比如read_parquet、read_excel df = pd.read_csv(uri) dfs.append(df) combined_df = pd.concat(dfs, ignore_index=True)
关键说明
- GCS的Blob对象
name属性是官方维护的完整路径,包含空格在内的特殊字符都被正确保留,手动拆分字符串很容易因编码或分隔符问题破坏路径。 - 用带末尾斜杠的
prefix参数ABC/WW3/,能精准过滤该文件夹下的所有文件,不会误匹配类似ABC/WW3XYZ这类路径的内容。 - 过滤
endswith('/')的Blob是因为GCS没有真正的文件夹,这些“文件夹”其实是大小为0的空Blob,没必要加入URI列表。
内容的提问来源于stack exchange,提问作者Reut
相关产品推荐
相关产品推荐

