I have a CSV file as follows.
oldFile.csv content:
oldHeader1,oldHeader2,oldHeader3
data01,data02,data03
data11,data12,data13
data21,data22,data23
and I want to rename the headers with new ones. Here’s the code I use to do this:
import csv
with open("oldFile.csv", "r") as input:
reader = csv.DictReader(input, delimiter=",")
reader.fieldnames = ["newHeader1", "newHeader2", "newHeader3"]
rows = list(reader)
with open("newFile.csv", "w", newline="") as output:
writer = csv.DictWriter(output, fieldnames=reader.fieldnames, delimiter=",")
writer.writeheader()
for row in rows:
writer.writerow(row)
The problem is that it doesn’t change the headers, but adds new ones.
newFile.csv content:
newHeader1,newHeader2,newHeader3
oldHeader1,oldHeader2,oldHeader3
data01,data02,data03
data11,data12,data13
data21,data22,data23
I could delete the first line before defining the new headers, but referring to other stackoverflow questions (e.g. here or here) I have the impression that it should work without and that I’m doing something wrong.
What’s the proper way to achieve this?