以编程方式将 Google Cloud Storage 中每个文件名中的空格 (" ") 替换为下划线 ("_")

问题描述 投票:0回答:1

我有许多表格数据的 .csv 文件存储在 Cloud Storage 存储桶的不同文件夹中,这些文件是从外部数据源导入的。每天,Cloud Storage 存储桶的每个文件夹中都会导入一个新文件。每个文件的文件名中都包含一个空格 (" "),扩展名为“.csv”。我编写了一个云函数,将每个现有文件从该源存储桶复制到新创建的清理存储桶,并通过用破折号“-”字符替换空格“”字符来修改文件名。有没有办法实现云功能仅对使用云功能和发布/订阅上传的新文件执行此操作,而不是手动扫描两个存储桶中的文件?本质上我想做的是在 Pub/Sub 事件中发送和访问文件名和文件元数据,但我不知道如何在 Pub/Sub 事件中发送和访问这些数据。

提前致谢!

bash google-cloud-storage google-cloud-pubsub google-cloud-shell
1个回答
2
投票
Marc Anthony B 的

这个 Answer 解释了通过删除方括号 [] 来重命名文件名。您可以按照相同的方法通过更改正则表达式模式来删除空格并替换为下划线,如下所示。

代码基本上会遵循这3个步骤

  1. 列出您要重命名的对象
  2. 迭代该列表。
  3. 对于每个对象,更改名称。这些文件不会在后端重命名。它对您要重命名的每个对象执行复制,然后删除。
import re
from google.cloud import storage

storage_client = storage.Client()

bucket_name = "my_bucket"
bucket = storage_client.bucket(bucket_name)

storage_client = storage.Client()

blobs = storage_client.list_blobs(bucket_name)
pattern = r"\s"  #  regex for detecting whitespace
for blob in blobs:
    if re.match(pattern, blob.name):
        fixed_var = re.sub(pattern, "_", blob.name)
        new_blob = bucket.rename_blob(blob, fixed_var)
        print("Changed")
    print("No change required")

您还可以使用

gsutil mv
命令重命名具有给定前缀的所有对象,使其具有新的前缀。您可以参考此 文档 了解更多信息

gsutil mv gs://my_bucket/oldprefix gs://my_bucket/newprefix

© www.soinside.com 2019 - 2024. All rights reserved.