move files between directories in single GCP bucket

本秂侑毒 提交于 2020-05-28 08:34:36

问题


I am trying to set up cloud functions to move files between folders inside one bucket in GCP.

Whenever the user loads files into the provided bucket folder, my cloud functions move the file to another folder where big data scripts are looking after.

It shows successful while setting up, however, files are not moving from the source folders.

enter image description here

Appreciate your help

from google.cloud import storage

def move_file(bucket_name, bucket_Folder, blob_name):
    """Moves a blob from one folder to another with the same name."""
    bucket_name = 'bucketname'
    blob_name = 'filename'

    storage_client = storage.Client()

    bucket = storage_client.get_bucket(bucket_name)
    source_blob = bucket.blob("Folder1/" + blob_name)
    new_blob = bucket.copy_blob(source_blob, bucket, "Folder2/" + blob_name)
    blob.delete()

    print('Blob {} in bucket {} copied to blob {} .'.format(source_blob.name, bucket.name, new_blob.name))


回答1:


From the code you provided, the variable blob is not defined anywhere, so the source file won't be deleted. Instead of blob.delete(), change that line to source_blob.delete().

Also, I assume you are aware that you're "moving" just a single file. If you want to move all files prefixed with Folder1/ to Folder2 you could do something like this instead:

from google.cloud import storage

def move_files(self):

    storage_client = storage.Client()

    bucket = storage_client.get_bucket('bucketname')
    blobs = bucket.list_blobs(prefix='Folder1/')

    for blob in blobs:
     bucket.rename_blob(blob, new_name=blob.name.replace('Folder1/', 'Folder2/'))

For the latter, I reckon that there could be more efficient or better ways to do it.




回答2:


If you are just moving the object inside of the same bucket you can just rename the object with the desired route.

In Google Cloud Platform Storage there are no folders, just the illusion of them. Everything after the name of the bucket is part of the name of the object.

Also, I can see many errors in your function. You can use this generic function to move a blob from one folder to another inside of the same bucket:

from google.cloud import storage def rename_blob(bucket_name, blob_name, new_name): """Renames a blob.""" # bucket_name = "your-bucket-name" # blob_name = "folder/myobject" # new_name = "newfolder/myobject"

storage_client = storage.Client()
bucket = storage_client.bucket(bucket_name)
blob = bucket.blob(blob_name)

new_blob = bucket.rename_blob(blob, new_name)

print("Blob {} has been renamed to {}".format(blob.name, new_blob.name))


来源:https://stackoverflow.com/questions/59635453/move-files-between-directories-in-single-gcp-bucket

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!