らくがきちょう

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

Python の boto3 で S3 の操作を行うサンプル

Python から boto3 を使って S3 上のファイルを操作するサンプルを書いたのでメモしておきます。

表示

Bucket を一覧表示する

#!/usr/bin/env python
"""List existing buckets."""

import boto3

S3 = boto3.client('s3')
RESPONSE = S3.list_buckets()

for bucket in RESPONSE['Buckets']:
    print(f'{bucket["Name"]}')

Bucket 内のオブジェクトを一覧表示する (list_objects_v2() バージョン)

#!/usr/bin/env python
"""List objects."""

import sys
import boto3

ARGS = sys.argv
if len(ARGS) != 3:
    print('Usage: python list_objects.py [BUCKET] [FOLDER]')
    sys.exit(1)

S3 = boto3.resource('s3')
BUCKET = S3.Bucket(ARGS[1])
FOLDER = ARGS[2]
RESPONSE = BUCKET.meta.client.list_objects_v2(Bucket=BUCKET.name, Prefix=FOLDER)

for obj in RESPONSE['Contents']:
    print(f'{obj["Key"]}')

Bucket 内のオブジェクトを一覧表示する (objects.all() バージョン)

#!/usr/bin/env python
"""List objects."""

import sys
import boto3

ARGS = sys.argv
if len(ARGS) != 2:
    print('Usage: python list_objects.py [BUCKET]')
    sys.exit(1)

S3 = boto3.resource('s3')
S3BUCKET = S3.Bucket(ARGS[1])
KEYS = [obj.key for obj in S3BUCKET.objects.all()]  

for key in KEYS:
    print(key)

Bucket 内のオブジェクトを一覧表示する (正規表現指定可能バージョン))

#!/usr/bin/env python
"""List objects."""

import sys
import boto3
import re

ARGS = sys.argv
if len(ARGS) > 3:
    print('Usage: python list_objects.py [BUCKET] [PATTERN]')
    sys.exit(1)

S3 = boto3.resource('s3')
S3BUCKET = S3.Bucket(ARGS[1])
if(len(ARGS) == 2):
    PATTERN = '.*'
else:
    PATTERN = ARGS[2]
KEYS = [obj.key for obj in S3BUCKET.objects.all()]  

for key in KEYS:
    if re.compile(PATTERN).search(key):
        print(key)

削除

オブジェクトを削除する (指定 1 オブジェクト削除バージョン)

#!/usr/bin/env python
"""Delete object."""

import sys
import boto3

ARGS = sys.argv
if len(ARGS) != 3:
    print('Usage: python delete_object.py [BUCKET] [KEY]')
    sys.exit(1)

S3 = boto3.client('s3')
S3BUCKET = ARGS[1]
KEY = ARGS[2]

S3.delete_object(Bucket=S3BUCKET, Key=KEY)
print(key + " deleted.")

オブジェクトを削除する (正規表現指定可能バージョン))

#!/usr/bin/env python
"""Delete objects."""

import sys
import boto3
import re

ARGS = sys.argv
if len(ARGS) != 3:
    print('Usage: python delete_objects.py [BUCKET] [PATTERN]')
    sys.exit(1)

S3 = boto3.resource('s3')
S3CLIENT = boto3.client('s3')
S3BUCKET = S3.Bucket(ARGS[1])
PATTERN = ARGS[2]
KEYS = [obj.key for obj in S3BUCKET.objects.all()]  

for key in KEYS:
    if re.compile(PATTERN).search(key):
        S3CLIENT.delete_object(Bucket=S3BUCKET.name, Key=key)
        print(key + " deleted.")