らくがきちょう

なんとなく ~所属組織/団体とは無関係であり、個人の見解です~

Python の boto3 で S3 とダウンロード/アップロードする

以前に Python の boto3 で S3 の操作を行うサンプルというメモを書きました。 今回はアップロード / ダウンロードサンプルをメモしておきます。

事前準備

awscliboto3 をインストールしておきます。

pip install awscli boto3

awscli の設定を済ませておきます。

# aws configure
AWS Access Key ID [None]: XXXXXXXXXXXXXXXXXXXX
AWS Secret Access Key [None]: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Default region name [None]: ap-northeast-1
Default output format [None]: json

ローカルファイルをアップロード

ローカルファイルを S3 Bucket へアップロードするには S3.Bucket.upload_file を使います。

#!/usr/bin/env python

import boto3

BUCKET = 'BUCKET'
KEY = 'hello.txt'

s3 = boto3.resource('s3')
s3.Bucket(BUCKET).upload_file(Filename=KEY, Key=KEY)

ローカルファイルへダウンロード

S3 Bucket 上のファイルをローカルへダウンロードするには S3.Bucket.download_file を使います。

#!/usr/bin/env python

import boto3

BUCKET = 'BUCKET'
KEY = 'hello.txt'

s3 = boto3.resource('s3')
s3.Bucket(BUCKET).download_file(Filename=KEY, Key=KEY)

メモリ上へダウンロード

S3 Bucket 上のファイルをローカルにはダウンロードせず、オンメモリで処理したい場合は S3.Client.get_object でオブジェクトを取得し、その Body のバイト配列を利用します。 下記の例では単純に表示させているので .decode() して表示しています。

import boto3

BUCKET = 'BUCKET'
KEY = 'hello.txt'

s3 = boto3.client('s3')
obj = s3.get_object(Bucket=BUCKET, Key=KEY)
print(obj['Body'].read().decode())