Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python3: writing csv files

I'm trying to use Python 3.2 on a Windows computer to write a simple CSV file, however I'm having no luck. From the csv module documentation for Python 3.2:

>>> import csv >>> spamWriter = csv.writer(open('eggs.csv', 'w'), delimiter=' ', ...                         quotechar='|', quoting=csv.QUOTE_MINIMAL) >>> spamWriter.writerow(['Spam'] * 5 + ['Baked Beans']) >>> spamWriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam']) 

produces a file with each line terminated by the byte sequence \r\r\n, so it looks like each line has an extra empty line when you open it with, e.g., MS Excel. This is not a "CSV file".

Note, if I try the same example for Python 2.7 in Python 3.2 (where the big difference is 'w' vs 'wb' for the file mode), I get an error when I try spamWriter.writerow:

Traceback (most recent call last): File "", line 1, in TypeError: 'str' does not support the buffer interface

How do I write a simple CSV file from Python 3.2 on a Windows computer?

like image 206
Mike T Avatar asked Aug 26 '11 06:08

Mike T


People also ask

How do I write a CSV file in Python?

Write CSV files with csv.DictWriter() class can be used to write to a CSV file from a Python dictionary. Here, file - CSV file where we want to write to. fieldnames - a list object which should contain the column headers specifying the order in which data should be written in the CSV file.

How do you write into CSV file in Python using pandas?

By using pandas. DataFrame. to_csv() method you can write/save/export a pandas DataFrame to CSV File. By default to_csv() method export DataFrame to a CSV file with comma delimiter and row index as the first column.


2 Answers

Documentation says that you should use open('eggs.csv', 'w', newline='')

http://docs.python.org/py3k/library/csv.html#id2

like image 132
alexanderlukanin13 Avatar answered Oct 11 '22 12:10

alexanderlukanin13


This will work on both Python 2 and Python 3:

if sys.version_info >= (3,0,0):     f = open(filename, 'w', newline='') else:     f = open(filename, 'wb') 
like image 39
Dave Burton Avatar answered Oct 11 '22 12:10

Dave Burton