Записать итерации s3 в файл csv, разделив их по столбцам с помощью Boto3 / Python3 - PullRequest
0 голосов
/ 21 января 2020

Я записываю свой вывод в файл CSV. Вот мой вывод:

bucket_name | s3_key_path

value        , value

bucket_name | s3_key_path

value        , value

Я хочу, чтобы вывод был:

bucket_name | s3_key_path

value        , value

value        , value

value        , value

Вот мой код:

s3 = boto3.resource('s3',
    aws_access_key_id=ACCESS_KEY,
    aws_secret_access_key=SECRET_KEY
    )

bucket1=s3.Bucket(BUCKET)


def load_into_csv():

    with open('/my_path/ms3_files_V2.csv', 'w', newline='') as file:
        header=['bucket_name', 's3_key_path']
        for objects in bucket1.objects.filter(Prefix=PREFIX):
            bucket_name=  '{}' .format(bucket1.name)
            the_key= '{}' .format(objects.key)
            dd={'bucket_name': bucket_name, 's3_key_path': the_key}
            writer = csv.DictWriter(file, fieldnames=header)
            writer.writeheader()
            for row in dd:
                print(row)
                writer.writerow(row)
load_into_csv()

Любая идея о том, почему мой вывод продолжает помещать заголовки для каждого значения над ним?

1 Ответ

1 голос
/ 22 января 2020

Вам нужно поставить запись заголовка перед for l oop:

        header = ['bucket_name', 's3_key_path']
        writer = csv.DictWriter(file, fieldnames=header)
        writer.writeheader()
        for objects in bucket1.objects.filter(Prefix=PREFIX):

В противном случае заголовок будет записан для каждого объекта в корзине.

...