Python
 Computer >> コンピューター >  >> プログラミング >> Python

PythonとBoto3を使ってS3オブジェクトをダウンロードする方法

この記事では、PythonとBoto3ライブラリを使用して、AWS S3バケットからファイルや画像をダウンロードする具体的な方法をコード例とともに解説します。

Boto3はAWS公式のPython用SDK(ソフトウェア開発キット)です。EC2やS3バケットといったAWSサービスと簡単に連携できる使いやすい関数群を提供しており、PythonでのAWS操作の定番ライブラリとなっています。

PythonとBoto3でS3オブジェクトをダウンロードする基本

まずは、指定したS3バケットから1つのファイルをダウンロードする基本的な例を見てみましょう。

S3を操作するには、boto3.client('s3') を使ってS3クライアントを作成する必要があります。

import boto3

BUCKET_NAME = 'my_s3_bucket'
BUCKET_FILE_NAME = 'my_file.json'
LOCAL_FILE_NAME = 'downloaded.json'

def download_s3_file():
    s3 = boto3.client('s3')
    s3.download_file(BUCKET_NAME, BUCKET_FILE_NAME, LOCAL_FILE_NAME)

download_file メソッドは3つの引数を受け取ります。

  • 第1引数: ダウンロード元となるS3バケット名
  • 第2引数: ダウンロードしたいファイル名(拡張子を含む)
  • 第3引数: ローカルに保存するときのファイル名

指定したバケット内のすべてのオブジェクトをダウンロードする

次に、指定したS3バケット内のすべてのオブジェクトを一括でダウンロードする例を紹介します。

このコードは、ファイルがバケットのルート直下に配置されており、サブフォルダ内には存在しないことを前提としています。

import boto3

def download_all_files():
    # S3リソースを初期化
    s3 = boto3.resource('s3')
    # バケットを選択
    my_bucket = s3.Bucket('bucket_name')
    # カレントディレクトリにファイルをダウンロード
    for s3_object in my_bucket.objects.all():
        filename = s3_object.key
        my_bucket.download_file(s3_object.key, filename)

ここでは boto3.client() ではなく boto3.resource() を使用しています。リソースインターフェースを使うと、バケット内のオブジェクト一覧を取得して反復処理するのがより直感的になります。

S3バケットのサブフォルダ内のオブジェクトをすべてダウンロードする

続いて、S3バケット内の特定のサブフォルダに格納されているファイルをダウンロードする方法を紹介します。

たとえば、以下のようなバケット構成でファイルが保存されているとします。

  • BUCKET_NAME = 'images'
  • PATH = pets/cats/
import boto3
import os

def download_all_objects_in_folder():
    s3_resource = boto3.resource('s3')
    my_bucket = s3_resource.Bucket('images')
    objects = my_bucket.objects.filter(Prefix='pets/cats/')
    for obj in objects:
        path, filename = os.path.split(obj.key)
        my_bucket.download_file(obj.key, filename)

ポイントは objects.filter(Prefix='...') の部分です。Prefixを指定することで、そのパス配下のオブジェクトだけを絞り込んで取得できます。また、os.path.split() を使ってオブジェクトキーからファイル名だけを取り出し、ローカルに保存しています。

まとめ

Boto3を使えば、単一ファイルのダウンロードからバケット全体・特定フォルダの一括ダウンロードまで、シンプルなコードで実現できます。用途に応じて clientresource のどちらのインターフェースを使うかを選択するとよいでしょう。

参考資料

Boto 3 公式ドキュメント

  1. Pythonによるデータ分析と可視化入門!pandas・matplotlibの使い方を解説

    このチュートリアルでは、Pythonのpandasやmatplotlibなどのモジュールを使ったデータ分析と可視化の方法を学びます。Pythonはデータ分析に非常によく適した言語です。まずは以下のコマンドでpandasとmatplotlibをインストールしましょう。 pip install pandas pip install matplotlib インストールが完了すると成功メッセージが表示されます。まずpandasについて学び、その後でmatplotlibを見ていきましょう。 pandasとは pandasはPythonのオープンソースライブラリで、データ分析のための豊富なツールを提供し

  2. Pythonのファイルオブジェクトとは?open関数によるファイル操作の基本を徹底解説

    Pythonでは、ファイルを読み書きする際に特別なライブラリをインポートする必要はありません。ファイル操作は言語にネイティブに組み込まれているためです。 まず最初に行うのは、組み込み関数 open() を使ってファイルオブジェクトを取得することです。open() 関数はファイルを開き、ファイルオブジェクトを返します。このファイルオブジェクトには、開いたファイルから情報を取得したり、内容を操作したりするためのメソッドや属性が含まれています。 ファイルとは何か? ファイル操作を行う前に、「ファイルとは何か」を理解しておきましょう。ファイルとは、関連する情報を保存するためにディスク上に確保された「名