简体   繁体   English

使用 Boto3/Python3 按列分隔,编写 s3 迭代到 csv 文件

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

I am writing my output to a csv file.我正在将输出写入 csv 文件。 Here is my output:这是我的输出:

bucket_name | s3_key_path

value        , value

bucket_name | s3_key_path

value        , value

I want the output to be:我希望输出是:

bucket_name | s3_key_path

value        , value

value        , value

value        , value

Here is my code:这是我的代码:

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()

Any idea as to why my output keeps putting the headers for each value above it?知道为什么我的输出总是将每个值的标题放在它上面吗?

You need to put the writing of the header before the for loop:您需要将标题的写入放在for循环之前:

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

Otherwise the header will be written for each object in the bucket.否则,将为存储桶中的每个对象写入标头。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM