[解決済み] boto3を使ってS3オブジェクトをファイルに保存する方法
2022-04-27 04:21:29
質問
私は、"hello world"を新しい ボツ3 AWSのクライアントです。
私のユースケースは、S3からオブジェクトを取得し、それをファイルに保存するという非常にシンプルなものです。
boto 2.Xでは、こんな風にします。
import boto
key = boto.connect_s3().get_bucket('foo').get_key('foo')
key.get_contents_to_filename('/tmp/foo')
ボツ3では.同じことをするきれいな方法が見つからないので、手動で "Streaming"オブジェクトを反復しているのです。
import boto3
key = boto3.resource('s3').Object('fooo', 'docker/my-image.tar.gz').get()
with open('/tmp/my-image.tar.gz', 'w') as f:
chunk = key['Body'].read(1024*8)
while chunk:
f.write(chunk)
chunk = key['Body'].read(1024*8)
または
import boto3
key = boto3.resource('s3').Object('fooo', 'docker/my-image.tar.gz').get()
with open('/tmp/my-image.tar.gz', 'w') as f:
for chunk in iter(lambda: key['Body'].read(4096), b''):
f.write(chunk)
そして、それは問題なく動作します。同じタスクを実行するboto3ネイティブの関数はないのでしょうか?
どのように解決するのですか?
最近Boto3に入ったカスタマイズで、これを助けるものがあります(他のものも含めて)。現在、低レベルのS3クライアントで公開されており、以下のように使用することができます。
s3_client = boto3.client('s3')
open('hello.txt').write('Hello, world!')
# Upload the file to S3
s3_client.upload_file('hello.txt', 'MyBucket', 'hello-remote.txt')
# Download the file from S3
s3_client.download_file('MyBucket', 'hello-remote.txt', 'hello2.txt')
print(open('hello2.txt').read())
これらの関数は、ファイルの読み書きを自動的に行い、大きなファイルのマルチパートアップロードを並行して行います。
なお
s3_client.download_file
では、ディレクトリは作成されません。作成できるのは
pathlib.Path('/path/to/file.txt').parent.mkdir(parents=True, exist_ok=True)
.
関連
-
python string splicing.join()とsplitting.split()の説明
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] 関数内でグローバル変数を使用する
-
[解決済み] ファイルのコピー方法について教えてください。
-
[解決済み] Pythonでファイルやフォルダを削除する方法は?
-
[解決済み] Matplotlibでプロットを表示するのではなく、画像ファイルに保存する。
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】forループを使った辞書の反復処理
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonの非常に便利な2つのデコレーターを解説
-
Pythonコンテナのための組み込み汎用関数操作
-
Python関数の高度な応用を解説
-
Python Decorator 練習問題
-
Pythonによるjieba分割ライブラリ
-
PythonによるExcelファイルの一括操作の説明
-
[解決済み】DataFrameのコンストラクタが正しく呼び出されない!エラー
-
[解決済み】終了コード -1073741515 (0xC0000135)でプロセス終了)
-
[解決済み】IndexError: invalid index to scalar variableを修正する方法
-
[解決済み】boto3でCloudFrontに接続する際のAWSプロファイルの選択方法