概要
- AWSのS3バケットに保存されたCSVファイルをパッと読み込んで使うコードです
- 難しいことはしません
- 自分用スニペットです
- 一旦ローカルファイルに保存しないので、巨大なファイルはメモリ注意ですね
- 巨大ファイルの場合は素直にローカルにダウンロードするのが良いと思われます
- 巨大な場合は全列必要でない可能性も考慮するとS3 Selectも検討範囲になるかもしれません
コード
csv_from_s3.py
import io
import csv
import boto3
def get_s3file(bucket_name, key):
s3 = boto3.resource('s3')
s3obj = s3.Object(bucket_name, key).get()
return io.TextIOWrapper(io.BytesIO(s3obj['Body'].read()))
for rec in csv.DictReader(get_s3file('my-bucket-name', 'test.csv')):
print(rec)
確認
- awscli使います
テスト用CSV作成
$ cat << EOF > test.csv
id,name,price
1,apple,100
2,orange,200
3,grape,300
EOF
S3バケット作成とアップロード
$ aws s3 mb s3://my-bucket-name
$ aws s3 cp test.csv s3://my-bucket-name/
コード実行
- サンプルとしてDictReaderを使っているので、dict型になっています
$ python csv_from_s3.py
{'id': '1', 'name': 'apple', 'price': '100'}
{'id': '2', 'name': 'orange', 'price': '200'}
{'id': '3', 'name': 'grape', 'price': '300'}