S3のフラットな構造について誰かに教えてもらう前に、私はすでに知っていますが、S3で'フォルダ 'を作成することができます。このPythonコードの私の目的は、実行の日付を使用して名前を付けた名前の新しいフォルダを作成し、これにユーザーの入力を追加することです(createS3Folder関数です)。次に、ローカルディレクトリのフォルダをこのフォルダに同期します。新しいS3 'フォルダ'の下にBoto3フォルダの同期 '
問題は、私のupload_files関数が、ローカルセットアップのフォルダ構造を正確にエミュレートする新しいフォルダをS3に作成することです。
誰も名前を変更せずに新しく作成したフォルダにフォルダを同期する方法を提案できますか?
import sys
import boto3
import datetime
import os
teamName = raw_input("Please enter the name of your project: ")
bucketFolderName = ""
def createS3Folder():
date = datetime.date.today().strftime("%Y") + "." +
datetime.date.today().strftime("%B") + "." +
datetime.date.today().strftime("%d")
date1 = datetime.date.today()
date = str(date1) + "/" #In order to generate a file, you must
put "/" at the end of key
bucketFolderName = date + teamName + "/"
client = boto3.client('s3')
client.put_object(Bucket='MY_BUCKET',Key=bucketFolderName)
upload_files('/Users/local/directory/to/sync')
def upload_files(path):
session = boto3.Session()
s3 = session.resource('s3')
bucket = s3.Bucket('MY_BUCKET')
for subdir, dirs, files in os.walk(path):
for file in files:
full_path = os.path.join(subdir, file)
with open(full_path, 'rb') as data:
bucket.put_object(Key=bucketFolderName, Body=data)
def main():
createS3Folder()
if __name__ == "__main__":
main()
私はAWSに十分熟練しており、S3バケットのアイデアを十分に理解しています。私はこれらがオブジェクトであることは承知していますが(CLIに慣れていれば、Boto3はこれをAWSの初心者でさえも豊富にするでしょう)、概念的にはフォルダとして機能します。したがって、 "区切り文字"という言葉があります。プレーンテキストまたは他のデータストリーム内の独立した独立した領域間の境界を指定するために使用されます。区切り文字の例はカンマ区切りの値のシーケンスでフィールド区切り文字として機能するカンマ文字です。 – BitLord
このコンセプトは人々を理解するのが難しいことを除いて。フォルダはファイルシステムに存在するのと同じ方法でS3に存在しません。これを行う:1)TEST/2という名前のフォルダを作成する)このパスのファイルをアップロードするTEST/TESTFILE.TXT 3)オブジェクトTESTの名前をOTHER /に変更する。 TESTFILE.TXTというファイルが "OTHER /"にある2つのフォルダ "TEST /"と "OTHER /"があることに注目してください。ほとんどの人は、ディレクトリの名前を変更すると、inの子ファイルも取得すると予想します。 –