Posted at

【Python】boto3でS3ファイル操作まとめ


ディレクトリ構成

s3で以下のようにファイルが用意されている前提。

line/

└── diagonal/
└── hoge.csv


同バケット内でファイルをフォルダ間でコピー

line/diagonal/hoge.csvを新たにlineフォルダ下にstraightフォルダを作成しそこにコピー

import os

import boto3

BUCKET_NAME = 'your_bucket' # バケット名
COPY_FROM = 'line/diagonal' # コピー元ディレクトリパス
COPY_TO = 'line/straight' # コピー先ディレクトリパス]
FILE_NAME = 'hoge.csv' # ファイル名

s3 = boto3.client('s3')

copy_from_path = os.path.join(COPY_FROM, FILE_NAME)
copy_to_path = os.path.join(COPY_TO, FILE_NAME)

s3.copy_object(Bucket=BUCKET_NAME, key=copy_to_path, CopySource={'Bucket': BUCKET_NAME, 'Key': COPY_FROM_PATH})

実行するとlineフォルダ下にstraightフォルダが作成されそこにhoge.csvがコピーされる。

line/

├── diagonal/
│ └── hoge.csv
└── straight/
└── hoge.csv


ディレクトリからファイルを削除

diagonalフォルダからhoge.csvを削除する。

import os

import boto3

BUCKET_NAME = 'your_bucket' # バケット名
DELETE_DIR_PATH = 'line/diagonal' # コピー元ディレクトリパス
FILE_NAME = 'hoge.csv' # ファイル名

s3 = boto3.client('s3')

delete_file_path = os.path.join(DELETE_DIR_PATH, FILE_NAME)

s3.delete_object(Bucket=BUCKET_NAME, Key=delete_file_path)

実行するとdiagonalフォルダ下のhoge.csvがcsvが削除される。

line/

├── diagonal/

└── straight/
└── hoge.csv


S3からローカルにダウンロード

import os

import boto3

BUCKET_NAME = 'your_bucket' # バケット名
S3_PATH = 'line/straight'
LOCAL_PATH = 'hogehoge'
FILE_NAME = 'hoge.csv'

s3_resource = boto3.resource('s3')
bucket = s3_resource.Bucket(BUCKET_NAME)

downlod_from_path = os.path.join(S3_PATH, FILE_NAME)
download_to_path = os.path.join(LOCAL_PATH, FILE_NAME)

bucket.download_file(downlod_from_path, download_to_path)


PandasデータフレームをcsvとしてS3に保存

import os

import pandas as pd
from io import StringIO
import boto3

S3_PATH = 'line/diagonal'
FILE_NAME = 'diagonal.csv'

df = pd.DataFrame([[1, 10], [2, 20], [3, 30]])

upload_path = os.path.join(S3_PATH, FILE_NAME)

csv_buffer = StringIO()
df.to_csv(csv_buffer)
s3_resource = boto3.resource('s3')
s3_resource.Object(S3_BUCKET, upload_path.put(Body=csv_buffer.getvalue())

実行するとdiagonalフォルダ下にdiagonl.csvが作成される

line/

├── diagonal/
│ └── diagonal.csv
└── straight/
└── hoge.csv