我正在使用下面的脚本下载整个S3存储桶(使用https://stackoverflow.com/users/9806031/konstantinos-katsantonis在使用Boto3从S3下载文件夹中(。
bucket中的每个对象都是一个csv文件,包含相同的结构:4个字段。1个时间戳,2个字符串,1个浮点值。总是按照这个顺序。
import boto3
import botocore
import os
s3 = boto3.resource("s3",
region_name='us-east-2',
aws_access_key_id = '',
aws_secret_access_key = ''
)
bucket_name = '',
s3_folder = '',
local_dir = r''
def download_s3_folder(bucket_name, s3_folder, local_dir):
bucket = s3.Bucket(bucket_name)
for obj in bucket.objects.filter(Prefix=s3_folder):
target = obj.key if local_dir is None
else os.path.join(local_dir, os.path.relpath(obj.key, s3_folder))
if not os.path.exists(os.path.dirname(target)):
os.makedirs(os.path.dirname(target))
if obj.key[-1] == '/':
continue
bucket.download_file(obj.key, target)
download_s3_folder(bucket_name, s3_folder, local_dir)
当我执行脚本时,我会得到以下错误。我怀疑这是浮子存在的结果。
TypeError: expected string or bytes-like object
解决这个问题的最佳方法是什么?
这些行:
bucket_name = '',
s3_folder = '',
应该是:
bucket_name = ''
s3_folder = ''
行末尾的逗号导致字符串变成元组,而元组作为存储桶名称无效。