Skip to content

Python csv Module

CSV (Comma-Separated Values) files are a common file format for storing tabular data.

CSV files consist of plain text, where each row represents a row of data in the table, and each column is separated by a comma (or other delimiter).

CSV files are commonly used for data exchange because they are simple and easy to handle.

Python provides a built-in csv module for reading and writing CSV files. This module simplifies the process of handling CSV files, allowing developers to easily manipulate tabular data.


To read a CSV file, you can use the csv.reader object. Here is a simple example:

import csv

# Open the CSV file
with open('data.csv', mode='r', encoding='utf-8') as file:
    # Create a csv.reader object
    csv_reader = csv.reader(file)
    
    # Read data row by row
    for row in csv_reader:
        print(row)
  • open('data.csv', mode='r', encoding='utf-8'): Opens the file named data.csv in read-only mode, specifying the encoding as UTF-8.
  • csv.reader(file): Creates a csv.reader object for reading the file content.
  • for row in csv_reader: Reads the file content row by row, with each row of data parsed as a list.

To write a CSV file, you can use the csv.writer object. Here is an example:

import csv

# Data to write
data = [
    ['Name', 'Age', 'City'],
    ['Alice', '30', 'New York'],
    ['Bob', '25', 'Los Angeles']
]

# Open the CSV file
with open('output.csv', mode='w', encoding='utf-8', newline='') as file:
    # Create a csv.writer object
    csv_writer = csv.writer(file)
    
    # Write data
    for row in data:
        csv_writer.writerow(row)
  • open('output.csv', mode='w', encoding='utf-8', newline=''): Opens the file named output.csv in write mode, specifying the encoding as UTF-8. newline='' is used to avoid blank lines on Windows systems.
  • csv.writer(file): Creates a csv.writer object for writing file content.
  • csv_writer.writerow(row): Writes each row of data to the file.

3. Reading and Writing CSV Files Using Dictionaries

Section titled “3. Reading and Writing CSV Files Using Dictionaries”

The csv module also provides the DictReader and DictWriter classes, which can parse each row of a CSV file as a dictionary, or write dictionaries to a CSV file.

import csv

with open('data.csv', mode='r', encoding='utf-8') as file:
    csv_dict_reader = csv.DictReader(file)
    
    for row in csv_dict_reader:
        print(row)
import csv

data = [
    {'Name': 'Alice', 'Age': '30', 'City': 'New York'},
    {'Name': 'Bob', 'Age': '25', 'City': 'Los Angeles'}
]

with open('output.csv', mode='w', encoding='utf-8', newline='') as file:
    fieldnames = ['Name', 'Age', 'City']
    csv_dict_writer = csv.DictWriter(file, fieldnames=fieldnames)
    
    # Write the header
    csv_dict_writer.writeheader()
    
    # Write data
    for row in data:
        csv_dict_writer.writerow(row)

Method Description Example
csv.reader() Read CSV data from a file object reader = csv.reader(file)
csv.writer() Write data to a CSV file writer = csv.writer(file)
csv.DictReader() Read CSV rows as dictionaries (with headers) dict_reader = csv.DictReader(file)
csv.DictWriter() Write dictionaries to a CSV file (field names required) dict_writer = csv.DictWriter(file, fieldnames)
csv.register_dialect() Register a custom CSV format (e.g., delimiter) `csv.register_dialect(‘mydialect’, delimiter=’
csv.unregister_dialect() Unregister a registered dialect csv.unregister_dialect('mydialect')
csv.list_dialects() List all registered dialects print(csv.list_dialects())

Common Methods of csv.reader and csv.writer Objects

Section titled “Common Methods of csv.reader and csv.writer Objects”
Method Description Applicable Object
__next__() Iteratively read the next row (or use a for loop) reader
writerow(row) Write a single row of data writer
writerows(rows) Write multiple rows of data (list of lists) writer

csv.DictReader and csv.DictWriter Object Features

Section titled “csv.DictReader and csv.DictWriter Object Features”
Feature/Method Description Example
fieldnames List of field names (DictReader auto-obtains from the first row) dict_reader.fieldnames
writeheader() Write the header row (DictWriter only) dict_writer.writeheader()
Parameter Description Example Value Applicable Method
delimiter Field delimiter ',' (default), '\t' reader/writer
quotechar Quote character (wraps special fields) '"' (default) reader/writer
quoting Quoting rule csv.QUOTE_ALL (quote all) reader/writer
skipinitialspace Ignore spaces after delimiter True/False reader
lineterminator Line terminator '\r\n' (default) writer
dialect Predefined dialect name 'excel' (default) All methods

1. Reading a CSV File

import csv

with open('data.csv', 'r') as file:
    reader = csv.reader(file, delimiter=',')
    for row in reader:
        print(row)  # Each row is a list

2. Writing a CSV File

data = [['Name', 'Age'], ['Alice', 25], ['Bob', 30]]

with open('output.csv', 'w', newline='') as file:
    writer = csv.writer(file)
    writer.writerows(data)  # Write multiple rows

3. Using DictReader and DictWriter (with Headers)

# Reading
with open('data.csv', 'r') as file:
    dict_reader = csv.DictReader(file)
    for row in dict_reader:
        print(row['Name'], row['Age'])  # Access by field name

# Writing
fieldnames = ['Name', 'Age']
with open('output.csv', 'w', newline='') as file:
    dict_writer = csv.DictWriter(file, fieldnames=fieldnames)
    dict_writer.writeheader()  # Write the header
    dict_writer.writerow({'Name': 'Alice', 'Age': 25})

4. Custom Dialect (e.g., Handling TSV Files)

csv.register_dialect('tsv', delimiter='\t', quoting=csv.QUOTE_NONE)

with open('data.tsv', 'r') as file:
    reader = csv.reader(file, dialect='tsv')
    for row in reader:
        print(row)