如何指定 s3 存储桶下载的目的地 python
how to specify destination for s3 bucket download python
如何指定下载文件的目标路径?
s3 = boto3.resource(..)
my_bucket = s3.Bucket(S3_BUCKET)
# download file into current directory
for s3_object in my_bucket.objects.all():
path, filename = os.path.split(s3_object.key)
my_bucket.download_file(s3_object.key, filename)
这一行:
my_bucket.download_file(s3_object.key, filename)
filename
参数指定在本地磁盘上保存对象的位置。
Amazon S3 中对象的 Key
可以包含路径,例如 january/invoice.txt
。但是,您代码中的这一行:
path, filename = os.path.split(s3_object.key)
正在从文件名中拆分出路径,留下 path = january/
和 filename = invoice.txt
。
因此,当您的代码保存对象时,它会将它们保存在当前目录。
要修改这个,你应该在filename
中指定一个完整的路径,例如:
my_bucket.download_file(s3_object.key, '/tmp/' + filename)
当您想要保留目录结构时,事情会变得有点复杂。例如,可能有多个同名文件:
january/invoice.txt
february/invoice.txt
现有代码将覆盖第一个invoice.txt
第二个。如果您希望保留目录结构,您的代码将 不会 调用 os.path.split
,而是需要确保每个目标目录已经存在。
例如,参见:
如何指定下载文件的目标路径?
s3 = boto3.resource(..)
my_bucket = s3.Bucket(S3_BUCKET)
# download file into current directory
for s3_object in my_bucket.objects.all():
path, filename = os.path.split(s3_object.key)
my_bucket.download_file(s3_object.key, filename)
这一行:
my_bucket.download_file(s3_object.key, filename)
filename
参数指定在本地磁盘上保存对象的位置。
Amazon S3 中对象的 Key
可以包含路径,例如 january/invoice.txt
。但是,您代码中的这一行:
path, filename = os.path.split(s3_object.key)
正在从文件名中拆分出路径,留下 path = january/
和 filename = invoice.txt
。
因此,当您的代码保存对象时,它会将它们保存在当前目录。
要修改这个,你应该在filename
中指定一个完整的路径,例如:
my_bucket.download_file(s3_object.key, '/tmp/' + filename)
当您想要保留目录结构时,事情会变得有点复杂。例如,可能有多个同名文件:
january/invoice.txt
february/invoice.txt
现有代码将覆盖第一个invoice.txt
第二个。如果您希望保留目录结构,您的代码将 不会 调用 os.path.split
,而是需要确保每个目标目录已经存在。
例如,参见: