'Re-ordering columns in a csv but with Dictionaries

I need to re-order columns in a csv but I'll need to call each column from a dictionary.

EXAMPLE:

Sample input csv 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:
    order_of_headers_should_be = ['A', 'C', 'D', 'E', 'B']
    dictionary = {'A':'X1','B':'Y1','C':'U1','D':'T1','E':'K1'}
    writer = csv.DictWriter(outfile)
    # reorder the header first
    writer.writeheader()
    for row in csv.DictReader(infile):
        # writes the reordered rows to the new file
        writer.writerow(row)

The Output csv file needs to look like this:

$ cat reordered.csv
X1,U1,T1,K1,Y1
a1,c1,d1,e1,b1
a2,c2,d2,e2,b2

Trying to make a variable to call the dictionary



Solution 1:[1]

You can do this by permuting the keys when you are about to write the row like so:

for row in csv.DictReader(infile):
    # writes the reordered rows to the new file
    writer.writerow({dictionary[i]: row[i] for i in row})

Note the use of a dictionary comprehension.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1