Working With CSV Files Using Python, with Examples
In this article, we’ll learn how to use Python to read from and write data to CSV files, and how to convert CSV files to JSON format and vice versa. We’ll explore how to use the csv module and also look at examples that help understand how it works.
A CSV (comma-separated values) file is a text file format that allows data to be saved in a tabular structure. This is a popular format used for exporting and importing data from databases and spreadsheets.
As the name suggests, each piece of data in a CSV file is separated by a comma (,
). Sometimes the term “CSV” can be used to describe formats with other types of separators, such as colons (:
), semicolons (;
) and tabs (\t
). For the purposes of this article, we’ll just be dealing with CSV files that use commas as delimiters (known as RFC 4180).
When opened, the content of a CSV file looks like this:
Employee Id,First Name,Gender,Start Date,Last Login Time,Salary,Bonus %,Senior Management,Team
1,Douglas,Male,8/6/1993,12:42 PM,,6.945,TRUE,Marketing
2,Thomas,Male,3/31/1996,6:53 AM,61933,4.17,,
3,Maria,Female,4/23/1993,11:17 AM,,11.858,FALSE,Finance
4,Jerry,Male,3/4/2005,1:00 PM,138705,9.34,,Finance
As seen above, the comma delimiter, ,
, is used to separate each specific piece of data in the file.
The first row of data may optionally serve as the header, identifying each column of data below it. CSV files are commonly saved with a .csv
file extension.
The csv Module
Since spreadsheets and databases like MS SQL can be imported and exported as CSV files, it’s important to know how to handle data served in CSV format programmatically. Most programming languages like Python support handling files in CSV and also transforming them to other formats like JSON.
Python provides the csv module for reading, writing and performing other forms of file handling in CSV formats. The in-built library provides functions and classes that make working with CSV files seamless.
How to Read CSV Files Using Python
The csv module has the csv.reader()
function for reading CSV files. It’s used together with objects (including file objects) such as those produced with Python’s in-built open()
function.
Given a file object from a call to open()
, csv.reader()
will return a reader object. The reader object can be used to iterate over each line of CSV data, where rows are returned as a list of strings.
Let’s take an example:
import csv
with open('employees.csv', newline='') as file_obj:
reader_obj = csv.reader(file_obj)
for row in reader_obj:
print(row)
Here’s the output of the code above:
['Employee Id', 'First Name', 'Gender', 'Start Date', 'Last Login Time', 'Salary', 'Bonus %', 'Senior Management', 'Team']
['1', 'Douglas', 'Male', '8/6/1993', '12:42 PM', '', '6.945', 'TRUE', 'Marketing']
['2', 'Thomas', 'Male', '3/31/1996', '6:53 AM', '61933', '4.17', '', '']
['3', 'Maria', 'Female', '4/23/1993', '11:17 AM', '', '11.858', 'FALSE', 'Finance']
['4', 'Jerry', 'Male', '3/4/2005', '1:00 PM', '138705', '9.34', '', 'Finance']
['5', 'Larry', 'Male', '1/24/1998', '4:47 PM', '101004', '1.389', 'TRUE', 'Client Services']
...
From the first code snippet, the employees.csv
file is opened, after which the csv.reader()
function parses it and returns a reader object. A simple for loop is used to iterate over the reader object, which returns a list of data from the each row from the employees.csv
file, starting from the top.
How to Write to CSV Files Using Python
Besides reading data from CSV files, we can also write data to these files in Python. The csv.writer()
function enables us to write data to CSV format. After opening the file in write mode, the csv.writer()
function returns a writer object, which converts supplied data into delimited strings on the provided file object. The writer object has the writerow()
method for writing a row — an iterable of strings or numbers of comma-separated values per time — while the writerows()
method is used for multiple rows at once. The writerow()
and writerows()
methods are they only two options for writing data to a CSV file.
All the list objects used in the code snippet above could be grouped into a 2D list and passed in as an argument to the writerows()
method of the writer object to achieve the same result.
After the with
statement is executed, a CSV file (products.csv
) is created in the current working directory containing these comma-separated values.
Here’s an example:
import csv
with open('products.csv', 'w', newline='') as file_obj:
writer_obj = csv.writer(file_obj)
writer_obj.writerow(['Product Name', 'Price', 'Quantity', 'SKU Number' ])
writer_obj.writerow(['Rice', 80, 35, 'RI59023'])
writer_obj.writerow(['Curry', 2, 200, 'CY13890'])
writer_obj.writerow(['Milk', 9.5, 315, 'MK10204'])
Here’s the output of the code above:
Product Name,Price,Quantity,SKU Number
Rice,80,35,RI59023
Curry,2,200,CY13890
Milk,9.5,315,MK10204
How to Convert CSV to JSON Using Python
While performing file I/O operations, we might want to convert a CSV file to JSON format — which is popular for receiving and transmitting data between a client and a server. The csv module provides the csv.DictReader
class to help us to achieve this.
The csv.DictReader
class methods help to convert a given CSV file to a Python dictionary before applying the json module’s json.dump()
function to convert the resulting Python dictionary to a JSON file. The csv.DictReader()
class takes an optional fieldnames
argument. Where the field names are omitted, values from the first row will be mapped to the rest of the data as field names.
Let’s take a look at an example:
import csv
import json
my_dict = {}
with open('employees.csv', newline='') as file_obj:
reader_object = csv.DictReader(file_obj)
for row in reader_object:
key = row['Employee Id']
my_dict[key] = row
with open('employee.json', 'w', encoding='utf-8') as file_obj:
json.dump(my_dict, file_obj, indent=4)
Here’s the output of the code above:
"1": {
"Employee Id": "1",
"First Name": "Douglas",
"Gender": "Male",
"Start Date": "8/6/1993",
"Last Login Time": "12:42 PM",
"Salary": "",
"Bonus %": "6.945",
"Senior Management": "TRUE",
"Team": "Marketing"
},
"2": {
"Employee Id": "2",
"First Name": "Thomas",
"Gender": "Male",
"Start Date": "3/31/1996",
"Last Login Time": "6:53 AM",
"Salary": "61933",
"Bonus %": "4.17",
"Senior Management": "",
"Team": ""
},
...
To convert a CSV file to a JSON equivalent, we applied the following steps:
- opened the
employees.csv
file in read mode - created a Python dictionary from the returned file object using the
csv.DictReader
class - opened a JSON file in write mode, such as
employees.json
(if no such file had existed, one would have been created) - used the
dump()
function of the json module to convert the Python dictionary (my_dict
) to a JSON file
How to Convert JSON to CSV Using Python
In this section, we’ll look at how to convert data from a JSON file to CSV format. To achieve this, we’ll use both the in-built csv and json Python modules. The json module’s json.load()
function will help convert a JSON file to a Python dictionary, while the csv module’s csv.DictWiter
class methods will help convert the Python dictionary to a CSV file.
Here’s an example:
import csv
import json
py_dict = {}
# convert json file to python dictionary
with open('employees.json', 'r', encoding='utf-8') as file_obj:
py_dict = json.load(file_obj)
# convert write python dictionary to csv
with open('employees_records.csv', 'w', newline='') as file_obj:
csv_writer = csv.DictWriter(file_obj, fieldnames=py_dict['1'].keys())
csv_writer.writeheader()
for key in py_dict.keys():
csv_writer.writerow(py_dict[key])
To convert a JSON file to a CSV equivalent, we applied the following steps:
- opened the
employees.json
file in read mode - used the
json.load()
function to create a Python dictionarypy_dict
- opened a CSV file
employees_records.csv
in write mode (if no such file had existed, one would have been created) - created a writer object with the
csv.DictWriter
class with necessary arguments - used the writer object methods to map dictionaries into the appropriate number of rows
Conclusion
CSV files are very popular and often used in exporting and importing spreadsheets and databases. This file format is used very often by those working with data. However, while programming with Python there might be need to quickly use CSV files, so it’s important to learn how to perform file I/O operations with CSV.
Python’s csv module is very handy for working with CSV files, as it provides the necessary functions and classes for these sort of tasks.
It’s important to also note that we may need to convert files from one format to another (CSV to JSON) as seen in our examples above.