[GCP]CSVをCloud Functionsで作成してStorageにアップロードする

必要に迫られてプログラムを書いた。いつも通りRuntimeはPython3.7。

import os
import csv
from io import StringIO
from google.cloud import storage

# 環境変数を参照
BUCKET_NAME = os.environ.get('BUCKET_NAME')

"""
Storageへのアップロード処理
"""
def upload_blob(bucket_name, source_file_name, destination_blob_name):
    storage_client = storage.Client()
    bucket = storage_client.get_bucket(bucket_name)
    blob = bucket.blob(destination_blob_name)
    blob.upload_from_string(data=source_file_name, content_type='text/csv')

# トリガーをpub/subに設定
def main(event, context)
    # csvファイルに反映する内容
    list = [[1,2,3], [4,5,6], [7,8,9]]

    si = StringIO()
    cw = csv.writer(si, quoting=csv.QUOTE_ALL)# csvの値にダブルクオートを付与。
    cw.writerows(items_info)
    upload_blob(BUCKET_NAME, si.getvalue(), 'hoge.csv')

Pythonのio.StringIO

このモジュールを使うことでCSVファイルに使用する文字列をメモリ上に乗せることが出来る。
Cloud Functionsではいわゆるローカル環境でCSVファイルを作成するようなことでは無く、メモリ上の文字列を最終出力としてCSVファイルを生成することになる。

基本的にはバッファに文字列を読み込んだり書き込んだりすることができる。

import io

output = io.StringIO()
output.write(u'aaaaaaaaaaa')
output.write(u'bbbbbbbbbbb')
# 読み込んだ文字列を出力
print(output.getvalue())
# => aaaaaaaaaaabbbbbbbbbbb

# バッファクローズ
output.close()

input = io.StringIO(u'ccccccc')
print(input.getvalue())
# => ccccccc

# 書き込み
input.write(u'ddddddddddd')
print(input.getvalue())
# => ddddddddddd

参考

How do I write data into CSV format as string (not file)?

Pythonの勉強 : テキストバッファを扱うStringIO

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

15 + 20 =

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください