csv

The Python csv module provides functionality to read from and write to CSV (comma-separated values) files, which are a common format for data interchange.

The module offers both high-level and low-level interfaces for handling CSV data.

Here’s a quick example:

Python
>>> import csv

>>> with open("people.csv", newline="", encoding="utf-8") as csv_file:
...     for row in csv.reader(csv_file):
...         print(row)
...
['Name', 'Age', 'Occupation']
['Alice', '30', 'Engineer']
['Bob', '25', 'Data Scientist']

This code will work with the following people.csv file:

CSV people.csv
Name,Age,Occupation
Alice,30,Engineer
Bob,25,Data Scientist

Key Features

  • Reads CSV files into lists or dictionaries
  • Writes data to CSV files from lists or dictionaries
  • Supports custom delimiters and quoting characters
  • Handles CSV dialects for different CSV formats

Frequently Used Classes and Functions

Object Type Description
csv.reader function Reads CSV data from a file or iterable
csv.writer function Writes CSV data to a file
csv.DictReader class Reads CSV data into a dictionary
csv.DictWriter class Writes dictionary data to CSV format
csv.register_dialect function Registers a new dialect with the CSV module
csv.get_dialect function Returns a dialect object

Examples

Writing data to a CSV file:

Python
>>> data = [
...     {'Name': 'Alice', 'Age': 30, 'Occupation': 'Engineer'},
...     {'Name': 'Bob', 'Age': 25, 'Occupation': 'Data Scientist'}
... ]

>>> with open("people.csv", "w", newline="", encoding="utf-8") as csv_file:
...     fieldnames = ["Name", "Age", "Occupation"]
...     writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
...     writer.writeheader()
...     for row in data:
...         writer.writerow(row)
...

Common Use Cases

  • Reading data from CSV files for analysis
  • Writing data to CSV files for sharing or storage
  • Converting between different CSV dialects

Real-World Example

You have a CSV file with employee data. You want to:

  1. Read the data.
  2. Filter out employees under age 30.
  3. Write the filtered list to a new CSV file.

Here’s a sample CSV file:

CSV employees.csv
id,name,age,department,salary
101,Alice,28,Engineering,70000
102,Bob,35,Marketing,65000
103,Charlie,22,Sales,40000
104,Diana,45,HR,80000
105,Edward,29,Engineering,72000

Below is the Python code to perform the needed operations:

Python
>>> import csv

>>> employees = []

>>> with open("employees.csv", newline="", encoding="utf-8") as infile:
...     reader = csv.DictReader(infile)
...     for row in reader:
...         row["age"] = int(row["age"])
...         employees.append(row)
...

>>> filtered = [employee for employee in employees if employee["age"] >= 30]

>>> with open("filtered.csv", "w", newline="", encoding="utf-8") as outfile:
...     fieldnames = ["id", "name", "age", "department", "salary"]
...     writer = csv.DictWriter(outfile, fieldnames=fieldnames)
...     writer.writeheader()
...     writer.writerows(filtered)
...
31

The DictReader class uses the headers as keys and generates dictionaries with the values in each row. In the loop, you convert the age field into a number using int() to allow filtering and to store the data into a list.

Then, you use a comprehension to apply the filtering and finally write the resulting data to a new CSV file called filtered.csv using DictWriter.

Tutorial

Reading and Writing CSV Files in Python

Learn how to read, process, and parse CSV from text files using Python. You'll see how CSV files work, learn the all-important "csv" library built into Python, and see how CSV parsing works using the "pandas" library.

intermediate data-science

For additional information on related topics, take a look at the following resources:


By Leodanis Pozo Ramos • Updated June 26, 2025