Squeak.ru - шаблоны программирования

Почему у меня выводится только одна строка, когда я пытаюсь вывести свой кадр данных в файл csv? Python3/boto3

Я пытаюсь записать значение моего Bucket.name и obj.key в файл csv с соответствующим значением в соответствующем столбце.

Когда я запускаю приведенный ниже код, он выводит только одну строку в мой CSV-файл:

bucket_name | key_s3_path

value        , value

Однако вывод моей переменной ff:

{'bucket_name': ["'mybucket', "], 'key_s3_path'["'my/file/path/80ece.txt', "]}
{'bucket_name': ["'mybucket', "], 'key_s3_path': ["'my/file/path/80ece.txt', "]}
{'bucket_name': ["'mybucket', "], 'key_s3_path': ["'my/file/path/80ece.txt', "]}

Как видите, есть три значения, но в CSV-файл записывается только одно из трех значений.

Вот мой код:

def load_into_csv(years):
    for year in years:
        for buckett in s3.buckets.all():
            for aobj in buckett.objects.filter(Bucket=bucket,Prefix=PREFIX):
                if year in aobj.key:
                   f= "'{}', ".format(buckett.name)
                   ff= "'{}', ".format(aobj.key)
                   #print(f)
                   dd = {'bucket_name':[f], 'key_s3_path':[ff]}
                    #print(dd)
                   df = pd.DataFrame(data=dd)
                    #print(df)
                   export_csv = df.to_csv (r'my/path/0177_s3_files_v2.csv', index = None, header=True)

years=['2017']
load_into_csv(years)

ЛЮБЫЕ ИДЕИ относительно того, почему это происходит?


Ответы:


1

Вы пишете свой export_csv() внутри цикла for. Таким образом, в каждой итерации вы перезаписываете старый df, а также перезаписываете свой 0177_s3_files_v2.csv.

Вы должны попытаться вместо перезаписи df добавить значения в df, а затем, когда ваш цикл for закончится, написать csv.

Попробуйте что-то вроде этого:

def load_into_csv(years):
    df = pd.DataFrame()
    for year in years:
        for buckett in s3.buckets.all():
            for aobj in buckett.objects.filter(Bucket=bucket,Prefix=PREFIX):
                if year in aobj.key:
                   f= "'{}', ".format(buckett.name)
                   ff= "'{}', ".format(aobj.key)
                   #print(f)
                   dd = {'bucket_name':[f], 'key_s3_path':[ff]}
                    #print(dd)
                   df_2 = pd.DataFrame(data=dd)
                   df = df.append(df_2, ignore_index=True)
    export_csv = df.to_csv (r'my/path/0177_s3_files_v2.csv', index = None, header=True)

Изменить: более эффективное решение.

 def load_into_csv(years):
    list_dd = []
    for year in years:
        for buckett in s3.buckets.all():
            for aobj in buckett.objects.filter(Bucket=bucket,Prefix=PREFIX):
                if year in aobj.key:
                    f= "'{}', ".format(buckett.name)
                    ff= "'{}', ".format(aobj.key)
                    # Store into a list the bucket_name and the path.
                    list_dd.append( [f, ff] )

    # Create the dataframe with the list previusly generated.
    df = pd.DataFrame(list_dd, columns = ['bucket_name', 'key_s3_path'])
    export_csv = df.to_csv (r'my/path/0177_s3_files_v2.csv', index = None, header=True)
16.01.2020
  • СПАСИБО ВАМ!! ВЫ ЗАСЛУЖИВАЕТЕ НАГРАДУ 16.01.2020
  • Спасибо!! Всегда рад помочь ^^ 16.01.2020
  • Это работает, но очень медленно. вы знаете способ увеличить скорость? Возможно, писатели? 17.01.2020
  • Это работает, но очень медленно. вы знаете способ увеличить скорость? Возможно, писатели? 17.01.2020
  • Да appendэто не очень эффективный метод. Вы можете использовать список для хранения вашей переменной dd, а когда цикл закончится, создайте окончательный кадр данных. Смотрите мое редактирование 17.01.2020
  • Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...