如何修改Python函数将S3对象下载到自定义本地目录
修改后的Python函数
import os import boto3 def downloadDirectoryFroms3(bucketName, remoteDirectoryName, localDirectoryName): s3_resource = boto3.resource('s3') bucket = s3_resource.Bucket(bucketName) number = 0 for obj in bucket.objects.filter(Prefix=remoteDirectoryName): number += 1 # 获取文件相对远程目录的路径,移除远程目录前缀 relative_path = os.path.relpath(obj.key, remoteDirectoryName) # 拼接本地保存路径 local_path = os.path.join(localDirectoryName, relative_path) # 创建本地目录(不存在则创建) if not os.path.exists(os.path.dirname(local_path)): os.makedirs(os.path.dirname(local_path)) # 下载文件到指定本地路径 bucket.download_file(obj.key, local_path) # 调用示例:将远程AnalysisOutput目录下的文件下载到本地tempS3output目录 downloadDirectoryFroms3('reciter-dynamodb', 'AnalysisOutput', 'tempS3output')
修改说明:
- 新增
localDirectoryName参数,用来指定本地保存的根目录,彻底避免硬编码路径 - 用
os.path.relpath剥离S3对象key里的远程目录前缀,得到文件的相对路径 - 通过
os.path.join把本地根目录和文件相对路径拼接成最终的本地保存路径 - 保持原有的目录创建逻辑,确保文件能正确保存到目标路径
内容的提问来源于stack exchange,提问作者Paul Albert
相关产品推荐
相关产品推荐

