DEV Community

Kajigga for Scripting With Python

Posted on • Originally published at on

Easy Exporting CSV Data with Python

Easy Exporting CSV Data with Python

This article is a follow-up to Reading CSV Data with Python.

In that article, I described what CSV files are and how to read CSV Data. The flip side to reading data is writing data out to a file. I will summarize again what a CSV file is then go into how to write data in this format.

CSV files are extremely common. I run into them all the time at work when transferring data. At home, a CSV file is almost always an option when exporting a file from the bank or out of Google Sheets.

What is CSV?

CSV = C omma S eparated V alues

Easy Exporting CSV Data with Python

Photo by Andrew Furlan / Unsplash

We see them all the time but there seems to be some confusion about what a CSV file really is. When I talk to people about CSV files, I realize that most of us equate them with Microsoft Excel documents. This is probably because Excel is often the default program for opening CSV files.

Here is the thing. A CSV file is simply a text file. That's it, nothing more. The file extension is usually .csv but it doesn't have to be. Any file extension is simply a hint to what is contained in the file and doesn't actually determine or control the content type. The Wikipedia Article about CSV files states that:

"CSV" is not a single, well-defined format.

As a result, in practice the term "CSV" might refer to any file that:

  • is plain text using a character set such as ASCII, various Unicode character sets
  • consists of records (typically one record per line), with the records divided into fields separated by delimiters
  • where every record has the same sequence of fields

Here is an example. I have a file called users.csv sitting on my desktop. In a spreadsheet program (Excel, Google Sheets, LibreOffice, Numbers, etc) this file would look like this.

Easy Exporting CSV Data with Python

Those columns and rows are nice and fancy. We think there is something magical going one but it isn't. The contents of this file are really just:

Enter fullscreen mode Exit fullscreen mode

You can open a CSV file with a plaintext editor to see the true contents. It is very similar to viewing the source of a web page and looking at the underlying HTML.

A spreadsheet programs reads the CSV file and displays to the user (you and me) a pretty version that makes it easy to see the columns and rows.

As you can see in my example, A CSV file typically has one row per record. In this case there are 4 columns. The headers of the columns are user_id, first_name, last_name and email. Records will have one or more columns that are usually, not always, separated by a comma.

Enough Review Already, Get to the Writing Data Good Stuff

Ok, ok. Let's learn about how to write CSV data to a file or file-like object.

There are a few essentials points that you will need to remember when writing out CSV data.

Do not try to write CSV without a library.

You have better things to do with your time than to figure out how to handle every possible CSV variation. Believe me, I speak from experience. I will admit to wasting days of time before I discovered the built-in (yes built-in) csv module. Your efforts are better spent getting stuff done.

The csv module is Awesome

The CSV Module is built into every modern version of Python.[1]

This module handles all of the intricacies of reading and writing CSV data. It is crazy fast and just works.

To quote the Python Docs:

The csv module implements classes to read and write tabular data in CSV format. It allows programmers to say, “write this data in the format preferred by Excel,” or “read data from this file which was generated by Excel,” without knowing the precise details of the CSV format used by Excel. Programmers can also describe the CSV formats understood by other applications or define their own special-purpose CSV formats.

Enough Enough already... Get to An Example

Okay, okay. Let's start with an example.

Finish reading this article at

Top comments (0)