Python - re-ordering columns in a csv
Question: I have a bunch of csv files with the same columns but in different order. We
are trying to upload them with SQL*Plus but we need the columns with a fixed
column arrange.

Example

required order: A B C D E F

csv file: A C D E B (sometimes a column is not in the csv because it is not
available)

is it achievable with python? we are using Access+Macros to do it... but it is
too time consuming

PS. Sorry if anyone get upset for my English skills.


Answer: You can use the [csv module](https://docs.python.org/2/library/csv.html) to
read, reorder, and then and write your file.

**Sample File:**

    
    
    $ cat file.csv
    A,B,C,D,E
    a1,b1,c1,d1,e1
    a2,b2,c2,d2,e2
    

**Code**

    
    
    import csv
    
    with open('file.csv', 'r') as infile, open('reordered.csv', 'a') as outfile:
        # output dict needs a list for new column ordering
        fieldnames = ['A', 'C', 'D', 'E', 'B']
        writer = csv.DictWriter(outfile, fieldnames=fieldnames)
        # reorder the header first
        writer.writeheader()
        for row in csv.DictReader(infile):
            # writes the reordered rows to the new file
            writer.writerow(row)
    

**output**

    
    
    $ cat reordered.csv
    A,C,D,E,B
    a1,c1,d1,e1,b1
    a2,c2,d2,e2,b2
    

