gpt4 book ai didi

python - 使用 Boto3 下载 S3 文件

转载 作者:太空宇宙 更新时间:2023-11-03 20:30:42 25 4
gpt4 key购买 nike

我目前正在编写一个脚本,需要将 S3 文件下载到创建的目录中。我当前使用凭据创建一个 boto3 session ,从该 session 创建一个 boto3 资源,然后使用它从我的 s3 位置查询和下载。它看起来类似于下面的示例:

s3_session = boto3.Session(...)
s3_resource = s3_session.resource('s3')

mnt_loc = '/home/username/tmp/'

s3_loc = urlparse('s3://bucket_name/path1/path2/', allow_fragments=False)
s3_files = []
bucket = s3_resource.Bucket(s3_loc.netloc)
for elem in bucket.objects:
s3_files.append(elem)

for elem in s3_files:
s3_resource.Bucket(elem.bucket_name).download_file(elem.key, mnt_loc + elem.key.rsplit('/', 1)[-1])

理论上,我认为这会将指定的文件从 s3 位置复制到我的安装位置,同时保留文件的命名。执行时,我得到一个

[Errno 2]没有这样的文件或目录:/home/username/tmp/filename.csv.F2H1nxR0。

为什么这个过程不起作用,为什么这个过程将这些随机字符串附加到我的文件名末尾,如所示的“F2H1nxR0”?

最佳答案

我找到了一种方法来纠正我收到的错误。问题是我将 s3.ObjectSummary 部分传递到我的 download_file() 中。为了修复此错误,我将所有部分转换为字符串,如下所示:

s3_session = boto3.Session(...)
s3_resource = s3_session.resource('s3')

mnt_loc = '/home/username/tmp/'

s3_loc = urlparse('s3://bucket_name/path1/path2/', allow_fragments=False)
s3_files = []
bucket = s3_resource.Bucket(s3_loc.netloc)
for elem in bucket.objects:
s3_files.append(elem)

for elem in s3_files:
bucket = str(elem.bucket_name)
path = str(elem.key)
file_name = str(elem.key.rsplit('/', 1)[-1])
s3_resource.Bucket(bucket).download_file(path, mnt_loc + file_name)

这消除了[Errno 2]没有这样的文件或目录:/home/username/tmp/filename.csv.F2H1nxR0,并删除了附加到文件名末尾的8个字符串。感谢大家的帮助,因为它引导我找到了这个修复程序。

关于python - 使用 Boto3 下载 S3 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57531243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com