如何动态提取GCS存储桶中指定层级的子文件夹路径(非硬编码日期)
解决方案
核心思路
去掉硬编码的日期前缀,通过字符串操作动态处理每个对象的路径:针对桶内对象的路径(blob.name),定位最后一个斜杠的位置,截取从路径开头到该位置的子串,就能得到你需要的日期/abc/这类层级路径;如果是文件夹前缀(prefixes),本身已经是以斜杠结尾的层级路径,可直接使用。
修改后的代码
def my_list_bucket(self, bucketName, delimiter='/'): storage_client = self.storage_client.lookup_bucket(bucketName) # 移除硬编码前缀,遍历整个存储桶;若需限定起始路径,可将prefix设为函数参数传入 blobs = storage_client.list_blobs(delimiter=delimiter) print("Blobs对应的目标路径:") for blob in blobs: blob_path = blob.name # 定位最后一个斜杠的索引 last_slash_idx = blob_path.rfind(delimiter) if last_slash_idx != -1: # 截取开头到最后一个斜杠的部分(包含斜杠) target_path = blob_path[:last_slash_idx+1] print(target_path) else: # 处理根目录下无层级的文件 print("该对象位于根目录,无层级路径") if delimiter: print("\nPrefixes(文件夹前缀):") for prefix in blobs.prefixes: # prefix本身就是带斜杠的层级路径,直接输出 print(prefix)
代码说明
- 移除硬编码的
prefix='20230130',若需限定遍历范围,可新增prefix参数,调用时传入对应起始路径。 - 用
rfind(delimiter)精准定位最后一个斜杠,确保截取的是桶名到最后一个子目录的完整路径部分。 - 增加无斜杠路径的处理逻辑,避免索引错误。
内容的提问来源于stack exchange,提问作者DarrenC
相关产品推荐
相关产品推荐

