Google Cloud Storage - 将文件从一个文件夹移动到另一个文件夹 - 使用 Python

Posted

技术标签:

【中文标题】Google Cloud Storage - 将文件从一个文件夹移动到另一个文件夹 - 使用 Python【英文标题】:Google Cloud Storage - Move file from one folder to another - By using Python 【发布时间】:2020-02-11 00:58:37 【问题描述】:

我想将文件列表从谷歌存储移动到另一个文件夹:

storage_client = storage.Client()
count = 0

# Retrieve all blobs with a prefix matching the file.
bucket=storage_client.get_bucket(BUCKET_NAME)
# List blobs iterate in folder 
blobs=bucket.list_blobs(prefix=GS_FILES_PATH, delimiter='/') # Excluding folder inside bucket
for blob in blobs:
if fnmatch.fnmatch(blob.name, FILE_PREF):
         WHAT CAN GO HERE?
         count += 1   

我在 Google 文档中找到的唯一有用信息是:

https://cloud.google.com/storage/docs/renaming-copying-moving-objects

根据本文档,唯一的方法是从一个文件夹复制到另一个文件夹并删除它。

    有什么方法可以实际移动文件? 根据 PREFIX 移动所有文件的最佳方法是什么,例如 *BLABLA*.csv

附:不想用

"gsutil mv gs://[SOURCE_BUCKET_NAME]/[SOURCE_OBJECT_NAME] gs://[DESTINATION_BUCKET_NAME]/[DESTINATION_OBJECT_NAME]"

【问题讨论】:

它在移动部分的正下方声明它始终是复制和删除。没有其他方法可以将文件复制到目标路径,然后删除源文件。 【参考方案1】:

这可能是一个可能的解决方案,因为 google.cloud.storage 中没有 move_blob 函数:

from google.cloud import storage  

dest_bucket = storage_client.create_bucket(bucket_to)
source_bucket = storage_client.get_bucket(bucket_from)
blobs = source_bucket.list_blobs(prefix=GS_FILES_PATH, delimiter='/') #assuming this is tested

for blob in blobs:
    if fnmatch.fnmatch(blob.name, FILE_PREF): #assuming this is tested
        source_bucket.copy_blob(blob,dest_bucket,new_name = blob.name)
        source_bucket.delete_blob(blob.name)

【讨论】:

【参考方案2】:

你可以使用google.cloud.storage.Bucket中的rename_blob方法,这个函数移动文件并删除旧文件。 文件(blob)的名称必须不同 看看下面的代码:

from google.cloud import storage  

dest_bucket = storage_client.create_bucket(bucket_to)
source_bucket = storage_client.get_bucket(bucket_from)
blobs = source_bucket.list_blobs(prefix=GS_FILES_PATH, delimiter='/') #assuming this is tested

for blob in blobs:
    if fnmatch.fnmatch(blob.name, FILE_PREF): #assuming this is tested
        source_bucket.rename_blob(blob,dest_bucket,new_name = blob.name)

【讨论】:

以上是关于Google Cloud Storage - 将文件从一个文件夹移动到另一个文件夹 - 使用 Python的主要内容,如果未能解决你的问题,请参考以下文章

ReferenceError:导入@google-cloud/storage 时分配的左侧无效

错误:模块“google.cloud.bigquery_storage”没有属性“BigQueryReadClient”

使用 Cloud Functions for Firebase 和 @google-cloud/storage 删除图像时出现问题

Google cloud 存储 Storage

google cloud storage托管静态页面

如何访问 Python google.cloud.storage 上传方法中的错误原因?