【问题标题】:boto3 download with file pathboto3 下载文件路径
【发布时间】:2021-11-06 12:57:28
【问题描述】:

似乎无法弄清楚如何将我可以使用 cli 执行的操作转换为 boto3 python。

我可以正常运行:

aws s3 ls s3://bucket-name-format/folder1/folder2/
aws s3 cp s3://bucket-name-format/folder1/folder2/myfile.csv.gz

尝试使用 boto3:

import boto3
s3  = boto3.client('s3', region_name='us-east-1', aws_access_key_id=KEY_ID, aws_secret_access_key=ACCESS_KEY)


bucket_name = "bucket-name-format"
bucket_dir = "/folder1/folder2/"
bucket = '{0}{1}'.format(bucket_name,bucket_dir)
filename = 'myfile.csv.gz'
s3.download_file(Filename=final_name,Bucket=bucket,Key=filename)

我收到此错误:

存储桶名称“bucket-name-format/folder1/folder2/”无效:存储桶名称必须与正则表达式“^[a-zA-Z0-9.-_]{1,255}$”匹配或为ARN 匹配正则表达式 "^arn:(aws).:(s3|s3-object-lambda):[az-0-9]:[0-9]{12}:accesspoint[/ :][a-zA-Z0-9-.]{1,63}$|^arn:(aws).:s3-outposts:[az-0-9]+:[0-9] {12}:outpost[/:][a-zA-Z0-9-]{1,63}[/:]接入点[/:][a-zA-Z0-9-]{1,63}$" *

我知道错误是因为存储桶名称 "bucket-name-format/folder1/folder2/" 确实无效。

问题:如何添加路径?我见过的所有示例都只是列出了基本存储桶名称

【问题讨论】:

  • 确保您的 aws cli 默认使用相同的区域。
  • cli 配置说 us-east-1,它匹配。我正则表达式检查了“bucket-name-format/folder1/folder2/”,它是无效的
  • 哦!!!不,您需要将存储桶放在一个字符串中,并将文件的完整路径“前缀”。 s3 不像文件系统,文件名始终是完整路径。存储桶名称中不应包含路径。
  • 啊,好吧!,我只是尝试删除存储桶名称中的路径并将其添加到文件名中,得到 403 但我知道文件在那里。
  • 403 表示禁止 ;)_

标签: python amazon-s3 boto3


【解决方案1】:

执行以下命令:

aws s3 cp s3://bucket-name-format/folder1/folder2/myfile.csv.gz

S3 URI 可以分解成

  • 存储桶名称:bucket-name-format
  • 对象前缀:folder1/folder2/
  • 对象后缀:myfile.csv.gz

真的前缀和后缀有点做作,对象名真的是folder1/folder2/myfile.csv.gz

这意味着使用 boto3 API 下载相同的对象,你想用类似的方式调用它:

bucket_name = "bucket-name-format"
bucket_dir = "folder1/folder2/"
filename = 'myfile.csv.gz'
s3.download_file(Filename=final_name,Bucket=bucket_name,Key=bucket_dir + filename)

请注意,Bucket 的 download_file 参数只是存储桶名称,而 Key 不以正斜杠开头。

【讨论】:

  • 这正是我所需要的谢谢,我将final_name 更改为filename 并且工作了
  • 如何添加应该下载的目录?在这种语法中,我尝试过,我似乎无法在download_file 函数中定义保存路径
  • 啊,想通了:s3.download_file(bucket_name, prefix+filename, 'local_directory/{0}'.format(filename))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-25
  • 2019-12-28
  • 1970-01-01
  • 2017-01-26
  • 2022-08-24
  • 2013-12-09
  • 1970-01-01
相关资源
最近更新 更多