I am using DictWriter to output data in a dictionary to a csv file. Why does the CSV file have a blank line in between each data line? It's not a huge deal, but my dataset is big and doesn't fit into one csv file because it has too many lines since the "double-spacing" doubles the number of lines in the file.
My code for writing to the dictionary is:
headers=['id', 'year', 'activity', 'lineitem', 'datum'] output = csv.DictWriter(open('file3.csv','w'), delimiter=',', fieldnames=headers) output.writerow(dict((fn,fn) for fn in headers)) for row in rows: output.writerow(row)
This question is tagged with
~ Asked on 2012-01-05 17:31:27
By default, the classes in the
csv module use Windows-style line terminators (
\r\n) rather than Unix-style (
\n). Could this be what’s causing the apparent double line breaks?
If so, you can override it in the
output = csv.DictWriter(open('file3.csv','w'), delimiter=',', lineterminator='\n', fieldnames=headers)
~ Answered on 2012-01-05 17:44:21
If csvfile is a file object, it must be opened with the ‘b’ flag on platforms where that makes a difference.
In other words, when opening the file you pass 'wb' as opposed to 'w'.
You can also use a
with statement to close the file when you're done writing to it.
Tested example below:
from __future__ import with_statement # not necessary in newer versions import csv headers=['id', 'year', 'activity', 'lineitem', 'datum'] with open('file3.csv','wb') as fou: # note: 'wb' instead of 'w' output = csv.DictWriter(fou,delimiter=',',fieldnames=headers) output.writerow(dict((fn,fn) for fn in headers)) output.writerows(rows)
~ Answered on 2012-01-05 17:54:45