Google Cloud Storage - Перемещение файла из одной папки в другую - с помощью Python - PullRequest
0 голосов
/ 14 октября 2019

Я бы хотел переместить список файлов из хранилища Google в другую папку:

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:

Согласно этой документации, единственный способ состоит в том, чтобы скопировать из одной папки в другую и удалить ее.

  1. Любой способ фактически переместить файлы?
  2. Каков наилучший способ перемещения всех файлов на основе PREFIX, например *BLABLA*.csv

PS Не хотите использовать

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

Ответы [ 2 ]

1 голос
/ 14 октября 2019

Это может быть возможным решением, поскольку в google.cloud.storage:

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)
нет функции move_blob.
0 голосов
/ 04 ноября 2019

Вы можете использовать метод rename_blob в google.cloud.storage.Bucket, эта функция перемещает файл и удаляет старый. Необходимо, чтобы имена файлов (блобов) были разными
Взгляните на код ниже:

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)
...