使用指定的定界符重新排序CSV文件中的列

基本上,我想实现与此处批准的答案完全相同的任务。


但是,如果输入CSV文件使用分号作为分隔符,则该解决方案对我不起作用。我试图将代码更改为


writer = csv.DictWriter(outfile, fieldnames=fieldnames,  delimiter = ';')

但是它并不能解决问题,只会产生具有新顺序的CSV文件,标头良好,但数据为空(即,仅写入定界符)。


很抱歉创建一个副本,但是鉴于原始帖子的年代久远,我怀疑有人会注意到我在那里的问题/评论。


我正在使用以下代码:


#!/usr/bin/env python3


import sys, os, csv


def reorder():

    with open('in.csv', 'r') as infile, open('out.csv', 'a') as outfile:

        fieldnames = ['A', 'C', 'D', 'E', 'B']

        writer = csv.DictWriter(outfile, fieldnames=fieldnames, delimiter = ';')

        writer.writeheader()

        for row in csv.DictReader(infile):

            writer.writerow(row)


def main():

    reorder()


# standard boilerplate to call the main() function to begin the program

if __name__ == '__main__':

    main()

给出in.csv以下内容不会产生很好的效果:


A;B;C;D;E

a1;b1;c1;d1;e1

a2;b2;c2;d2;e2

用逗号替换分号可产生良好的效果。


更新:


我如下更改了相应的代码,可以正常工作:


    with open('in.csv', 'r') as infile, open('out.csv', 'w') as outfile:

        reader = csv.DictReader(infile, fieldnames = ['A', 'B', 'C', 'D', 'E'], delimiter=';')


        fieldnames = ['A', 'C', 'D', 'E', 'B']

        writer = csv.DictWriter(outfile, fieldnames=fieldnames, delimiter=';')

        writer.writeheader()

        for row in reader:

            writer.writerow(row)


拉丁的传说
浏览 169回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python