GoogleCloudStorage からそのユーザーのGoogle Drive へコピーするツール
背景
社内の人が、GoogleCloudStorage から複数のファイルをダウンロードする必要があるが、CLIを使わないといけないらしく、だるい。 せめて自分のGoogleDriveにアップロードできればいいのに…
解決策
google colaboratory を使う。そのコードもAIで生成した。
# prompt: GCSの指定されたパスのデータを自分のGoogle Driveの指定されたフォルダ名を作成し、そのフォルダにコピーするツール from google.colab import auth from google.colab import drive import os from google.cloud import storage auth.authenticate_user() def copy_data_from_gcs_to_drive(gcs_path, drive_folder_name): """GCSの指定されたパスのデータを自分のGoogle Driveの指定されたフォルダ名を作成し、そのフォルダにコピーする。 Args: gcs_path: コピー元のGCSパス (例: 'gs://my-bucket/my-folder') drive_folder_name: Google Driveに作成するフォルダ名 """ # Google Driveをマウント drive.mount('/content/drive') # Google Driveにフォルダを作成 drive_folder_path = os.path.join('/content/drive/My Drive', drive_folder_name) if not os.path.exists(drive_folder_path): os.makedirs(drive_folder_path) # GCSクライアントを初期化 storage_client = storage.Client() # GCSパスからバケット名とプレフィックスを取得 bucket_name = gcs_path.split('//')[1].split('/')[0] prefix = '/'.join(gcs_path.split('//')[1].split('/')[1:]) # バケットを取得 bucket = storage_client.bucket(bucket_name) # プレフィックスに一致するBLOBをリストアップ blobs = bucket.list_blobs(prefix=prefix) # 各BLOBをGoogle Driveにコピー for blob in blobs: file_name = blob.name.split('/')[-1] drive_file_path = os.path.join(drive_folder_path, file_name) blob.download_to_filename(drive_file_path) print(f'Copied {blob.name} to {drive_file_path}') # 使用例 gcs_path = 'gs://my-bucket/my-folder' # コピー元のGCSパスを指定 drive_folder_name = 'my_gcs_data' # Google Driveに作成するフォルダ名を指定 copy_data_from_gcs_to_drive(gcs_path, drive_folder_name)
まとめ
Google Colaboratory と AI を使って、秒で解決。