簡體   English   中英

使用 Python 將 s3 對象下載到任意定義的本地目錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM