次のコードは、内部にファイルがないサブフォルダがある場合を除いてうまく動作し、サブフォルダはS3に表示されません。例えば /home/temp /サブフォルダにファイルがない場合、サブフォルダはS3に表示されません。 S3で空のフォルダもアップロードされるようにコードを変更する方法は? 私はsthを書こうとしました。 (下記を参照)、空のサブフォルダにput_object()を呼び出す方法はわかりません。pythonを使用してS3に空のサブフォルダをアップロードするには
#!/usr/bin/env python
import os
from boto3.session import Session
path = "/home/temp"
session = Session(aws_access_key_id='XXX', aws_secret_access_key='XXX')
s3 = session.resource('s3')
for subdir, dirs, files in os.walk(path):
# note: if not files ......
for file in files:
full_path = os.path.join(subdir, file)
with open(full_path, 'rb') as data:
s3.Bucket('my_bucket').put_object(Key=full_path[len(path)+1:],
Body=data)
さらに、この関数を呼び出して、サブフォルダやファイルが存在するかどうかをチェックしようとしました。それはファイルには機能しますが、サブフォルダには機能しません。サブフォルダが存在するかどうかをチェックする方法は? (サブフォルダが存在する場合、私はアップロードしないであろう)
def check_exist(s3, bucket, key):
try:
s3.Object(bucket, key).load()
except botocore.exceptions.ClientError as e:
return False
return True
ところで、私は
check if a key exists in a bucket in s3 using boto3
と
http://www.developerfiles.com/upload-files-to-s3-with-python-keeping-the-original-folder-structure/
から上記のコードを参照して共有するためのおかげで、それらはコード。
この質問はAWS S3基本何倍に関連している:S3は、オブジェクトストアで、すべてのオブジェクト名は、実際にキーの名前である、それはフォルダをサポートしていません。 AWSコンソールを使用して表示される内容は、任意です。そのため、S3が「PREFIX」と呼ばれるものを使用して、同様の接頭辞を共有するオブジェクト名を除外する理由があります。これは、ユーザーがフォルダのように体系的にオブジェクトを整理してフィルタリングできるようにする唯一の方法です。 – mootmoot