Я пытаюсь создать новое ведро с двумя пустыми папками в хранилище Google Cloud, используя клиентскую библиотеку python.
Я сослался на API клиентской библиотеки python для GCS (https://google-cloud-python.readthedocs.io/en/latest/storage/client.html) и нашел метод create_bucket(), но я также хотел бы создать в нем 2 папки - «обработанные» и «необработанные», но не смог найти метод для создания папок. . Любая помощь будет оценена по достоинству.
Спасибо






GCS имеет плоское пространство имен, то есть концепция «папки» не встроена в сервис, а скорее является абстракцией, реализованной различными клиентами. Например, как веб-интерфейс Cloud Storage (console.cloud.google.com/storage/browser), так и gsutil реализуют абстракцию папки, используя имя объекта, которое заканчивается на "/" Таким образом, вы можете создавать папки, создавая такие объекты, как your-bucket / abc / def / но это будет папка только для клиентов, которые знают / поддерживают это соглашение об именах.
Идея состоит в том, что я хочу иметь 2 папки (необработанные и обработанные), чтобы я мог сначала сохранить входные файлы в «необработанной» папке, обработать их с помощью потока данных и сохранить данные в bigquery, а затем, наконец, переместить файлы в «обработанную» папку. после завершения задания потока данных, чтобы в следующий раз, когда я запустил то же задание ETL потока данных, оно забирало файлы только из «необработанной» папки.
+ Parth-desai Похоже, Майк уже ответил на ваш первоначальный вопрос. Я бы отметил его ответ как решение и создал новый пост для другого вопроса. Вы можете упомянуть меня в комментарии под вопросом, и я отвечу на него, как только увижу его.
def copyFilesInFolder(self, file_name, src_blob_name, destination_blob_name):
"""Copies a blob from one bucket to another with a new name."""
# bucket_name = "your-bucket-name"
# blob_name = "your-object-name"
# destination_bucket_name = "destination-bucket-name"
# destination_blob_name = "destination-object-name"
# storage_client = storage.Client()
srcBlob = src_blob_name + '/' + file_name
destBlob = destination_blob_name + '/' + file_name
source_blob = self.bucket.blob(srcBlob)
destination_bucket = storage_client.bucket(destBlob)
blob_copy = self.bucket.copy_blob(
source_blob, self.bucket, destBlob
)
print(blob_copy)
print(
"File {} in bucket {} copied to blob {} in bucket {}.".format(
file_name,
src_blob_name,
file_name,
destination_blob_name,
)
)
return True
В GCP отсутствует концепция прямого создания папок. Таким образом, мы можем сохранить новый файл в новой папке, таким образом, даже если папка назначения не существует, он будет создан.
Спасибо, Майк! Я понимаю это, хотя хотел бы заранее иметь структуру папок и каждый день создавать новые папки. Я могу воспользоваться вашим предложением, назвав файлы в соответствии с соглашением при их загрузке. Однако как я могу перемещать файлы из одной папки в другую в одном ведре с помощью клиентского API Python?