Скачать папку S3, включая поле с плавающей запятой

Я использую приведенный ниже скрипт для загрузки всей корзины S3 (используя ответ из https://stackoverflow.com/users/9806031/konstantinos-katsantonis в Загрузите папку из S3 с помощью Boto3).

Каждый объект в корзине представляет собой 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

Что было бы лучшим способом обойти это?

Примечание: для повышения безопасности рекомендуется никогда не помещать ключ доступа и секретный ключ в файлы кода. Вместо этого используйте команду AWS CLI aws configure, чтобы сохранить учетные данные в файле конфигурации. boto3 автоматически использует учетные данные из этого файла.

John Rotenstein 16.12.2020 22:50

О каких «столбах» вы говорите? Какая строка выдает ошибку? Пожалуйста, отредактируйте свой вопрос, чтобы сообщить нам больше о том, что вы делаете и с какой проблемой вы столкнулись, чтобы мы могли попытаться воспроизвести ситуацию самостоятельно.

John Rotenstein 16.12.2020 22:52

Спасибо @JohnRotenstein. Я внес некоторые изменения, которые, надеюсь, прояснили некоторые вещи.

satdaya 17.12.2020 02:14
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
97
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Эти строки:

bucket_name = '',
s3_folder = '',

должно быть:

bucket_name = ''
s3_folder = ''

Запятая в конце строки приводила к тому, что строка становилась кортежем, что недопустимо в качестве имени корзины.

Другие вопросы по теме