[英]Use Python to download s3 objects to a arbitrarily defined local directory
我有一個 Python function(見下文),它從遠程 s3 目錄迭代下載對象並將它們存儲在本地文件夾中。
在當前 state 中,文件 go 在這里。
AnalysisOutput/file1
AnalysisOutput/file2
AnalysisOutput/file3
AnalysisOutput 是遠程存儲桶的名稱。 我不希望該目錄在我的本地實例上進行硬編碼。 相反,我希望他們在這里撥打 go:
tempS3output/file1
tempS3output/file2
tempS3output/file3
def downloadDirectoryFroms3(bucketName,remoteDirectoryName):
s3_resource = boto3.resource('s3')
bucket = s3_resource.Bucket(bucketName)
number = 0
for object in bucket.objects.filter(Prefix = remoteDirectoryName):
number = number + 1
if not os.path.exists(os.path.dirname(object.key)):
os.makedirs(os.path.dirname(object.key))
bucket.download_file(object.key,object.key)
downloadDirectoryFroms3('reciter-dynamodb', 'AnalysisOutput')
您可以使用標准庫中的removeprefix
來更改下載目錄。 您的 function 將變為:
def download_directory_from_s3(bucket_name, remote_directory_name, local_directory_name):
s3_resource = boto3.resource('s3')
bucket = s3_resource.Bucket(bucket_name)
number = 0
for object in bucket.objects.filter(Prefix=remote_directory_name):
number = number + 1
if not os.path.exists(os.path.dirname(object.key)):
os.makedirs(os.path.dirname(object.key))
local_path = f"{local_directory_name}/{object.key.removeprefix(remote_directory_name)}"
bucket.download_file(object.key, object.key)
download_directory_from_s3('reciter-dynamodb', 'AnalysisOutput')
假設object.key
是一個字符串,如果不是,則將其轉換為字符串,例如使用str(object.key)
之類的東西。
@Methacrylon 的評論非常有幫助。 我做了一些調整以使這項工作適合我。
download_directory_from_s3('reciter-dynamodb', 'AnalysisOutput','temp')
def download_directory_from_s3(bucket_name, remote_directory_name, local_directory_name):
s3_resource = boto3.resource('s3')
bucket = s3_resource.Bucket(bucket_name)
number = 0
for object in bucket.objects.filter(Prefix=remote_directory_name):
number = number + 1
print(object)
local_path = f"{local_directory_name}/"
file_name = local_path + "/" + object.key.removeprefix(remote_directory_name)
bucket.download_file(object.key, file_name)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.