使用 Boto3/Python3 按列分隔的 Writer s3 迭代到 csv 文件

Writer s3 iterations to a csv file by separted by column using Boto3/Python3

我正在将输出写入 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()

知道为什么我的输出总是将 headers 放在它上面的每个值吗?

你需要把header的写法放在for循环之前:

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

否则将为存储桶中的每个 object 写入 header。