Pythonically add header to a csv file Pythonically add header to a csv file python python

Pythonically add header to a csv file


The DictWriter() class expects dictionaries for each row. If all you wanted to do was write an initial header, use a regular csv.writer() and pass in a simple row for the header:

import csvwith open('combined_file.csv', 'w', newline='') as outcsv:    writer = csv.writer(outcsv)    writer.writerow(["Date", "temperature 1", "Temperature 2"])    with open('t1.csv', 'r', newline='') as incsv:        reader = csv.reader(incsv)        writer.writerows(row + [0.0] for row in reader)    with open('t2.csv', 'r', newline='') as incsv:        reader = csv.reader(incsv)        writer.writerows(row[:1] + [0.0] + row[1:] for row in reader)

The alternative would be to generate dictionaries when copying across your data:

import csvwith open('combined_file.csv', 'w', newline='') as outcsv:    writer = csv.DictWriter(outcsv, fieldnames = ["Date", "temperature 1", "Temperature 2"])    writer.writeheader()    with open('t1.csv', 'r', newline='') as incsv:        reader = csv.reader(incsv)        writer.writerows({'Date': row[0], 'temperature 1': row[1], 'temperature 2': 0.0} for row in reader)    with open('t2.csv', 'r', newline='') as incsv:        reader = csv.reader(incsv)        writer.writerows({'Date': row[0], 'temperature 1': 0.0, 'temperature 2': row[1]} for row in reader)


You just add one additional row before you execute the loop. This row contains your CSV file header name.

schema = ['a','b','c','b']row = 4generators = ['A','B','C','D']with open('test.csv','wb') as csvfile:         writer = csv.writer(csvfile, delimiter=delimiter)# Gives the header name row into csv     writer.writerow([g for g in schema])   #Data add in csv file            for x in xrange(rows):         writer.writerow([g() for g in generators])


This worked for me.

header = ['row1', 'row2', 'row3']some_list = [1, 2, 3]with open('test.csv', 'wt', newline ='') as file:    writer = csv.writer(file, delimiter=',')    writer.writerow(i for i in header)    for j in some_list:        writer.writerow(j)