LoginSignup
27
25

More than 1 year has passed since last update.

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

Last updated at Posted at 2019-11-07

ディレクトリ構成

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
27
25
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
25