GCS (Google Cloud Storage) を pythond で操作

2023年5月18日

メモ。

参考

インストール

下記のライブラリをインストールする。

pip install --upgrade google-api-python-client
pip install --upgrade google-cloud-storage

基本のコード

バケット操作をするために client を取得して操作する。
サンプルコードは下記の通り。

from google.cloud import storage as gcs
from google.oauth2 import service_account

# GCP Infos
PROJECT_ID = "xxx"
KEY_PATH = "./xxx.json"
BUCKET_NAME = "xxx"

# Credentials
credentials = service_account.Credentials.from_service_account_file(KEY_PATH)
client = gcs.Client(PROJECT_ID, credentials=credentials)

なお GCP 上ならば別にクレデンシャル情報は不要。

client = gcs.Client(PROJECT_ID)

バケット名一覧取得

[print(bucket.name) for bucket in client.list_buckets()]

バケット内のファイル一覧取得

[print(file.name) for file in client.list_blobs(BUCKET_NAME)]

バケットにアップロード

input_path = "./hoge.txt"
output_path = "./hoge.txt"
bucket = client.get_bucket(BUCKET_NAME)
blob_gcs = bucket.blob(input_path)
blob_gcs.upload_from_filename(output_path)

バケットからダウンロード

input_path = "./hoge.txt"
output_path = "./fugafuga.txt"
bucket = client.get_bucket(BUCKET_NAME)
blob = bucket.blob(input_path)
blob.download_to_filename(output_path)

バケットからファイルを読み込んでヘッダがキーの辞書にする

import io

import pandas as pd
from google.cloud import storage as gcs
from google.oauth2 import service_account

PROJECT_ID = "xxx"
KEY_PATH = "./xxx.json"
BUCKET_NAME = "xxx"

credentials = service_account.Credentials.from_service_account_file(KEY_PATH)
client = gcs.Client(PROJECT_ID, credentials=credentials)

file_names = [file.name for file in client.list_blobs(BUCKET_NAME)]
target_file_name = "test.csv"

if target_file_name in file_names:
    bucket = client.get_bucket(BUCKET_NAME)
    blob = gcs.Blob(target_file_name, bucket)
    content = blob.download_as_string()
    datas = pd.read_csv(io.BytesIO(content)).to_dict(orient="records")
    print(datas)
else:
    print(f"{BUCKET_NAME} に {target_file_name} はありませんでした。")

2023年5月18日