我有许多表格数据的 .csv 文件存储在 Cloud Storage 存储桶的不同文件夹中,这些文件是从外部数据源导入的。每天,Cloud Storage 存储桶的每个文件夹中都会导入一个新文件。每个文件的文件名中都包含一个空格 (" "),扩展名为“.csv”。我编写了一个云函数,将每个现有文件从该源存储桶复制到新创建的清理存储桶,并通过用破折号“-”字符替换空格“”字符来修改文件名。有没有办法实现云功能仅对使用云功能和发布/订阅上传的新文件执行此操作,而不是手动扫描两个存储桶中的文件?本质上我想做的是在 Pub/Sub 事件中发送和访问文件名和文件元数据,但我不知道如何在 Pub/Sub 事件中发送和访问这些数据。
提前致谢!
这个 Answer 解释了通过删除方括号 [] 来重命名文件名。您可以按照相同的方法通过更改正则表达式模式来删除空格并替换为下划线,如下所示。
代码基本上会遵循这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