Python CSV Writer Example

This example shows how to write rows to a CSV file in Python with the built-in csv module.

You will create a simple file named people.csv, write a header row and some data rows, and see what the finished file looks like. This is a good starting point if you want to export table-like data from a Python script.

Quick example

import csv

rows = [
    ["name", "age", "city"],
    ["Alice", 25, "London"],
    ["Bob", 30, "Paris"],
    ["Charlie", 22, "Berlin"]
]

with open("people.csv", "w", newline="", encoding="utf-8") as file:
    writer = csv.writer(file)
    writer.writerows(rows)

print("CSV file written successfully")

Note: Use newline="" when opening the file. This helps avoid blank lines in CSV output on some systems.

What this example does

  • Creates a new CSV file named people.csv
  • Writes a header row and several data rows
  • Uses Python's built-in csv module
  • Shows a simple beginner-friendly way to generate CSV output

If you want a broader explanation of CSV tools in Python, see the Python csv module overview.

How the code works

Here is the same code again:

import csv

rows = [
    ["name", "age", "city"],
    ["Alice", 25, "London"],
    ["Bob", 30, "Paris"],
    ["Charlie", 22, "Berlin"]
]

with open("people.csv", "w", newline="", encoding="utf-8") as file:
    writer = csv.writer(file)
    writer.writerows(rows)

print("CSV file written successfully")

1. Import csv

import csv

This imports Python's built-in CSV module so you can use csv.writer().

If you forget this line, Python will not know what csv means.

2. Store the data as rows

rows = [
    ["name", "age", "city"],
    ["Alice", 25, "London"],
    ["Bob", 30, "Paris"],
    ["Charlie", 22, "Berlin"]
]

This is a list of lists:

  • Each inner list is one row
  • The first row is the header
  • The remaining rows are the data

3. Open the file in write mode

with open("people.csv", "w", newline="", encoding="utf-8") as file:

This line does several important things:

  • "people.csv" is the file name
  • "w" means write mode
  • newline="" helps prevent extra blank lines
  • encoding="utf-8" is a good default for text files
  • with open(...) automatically closes the file when done

If you are new to open(), see Python open() function explained.

4. Create a CSV writer

writer = csv.writer(file)

This creates a writer object connected to the file.

You use this writer to send rows into the CSV file.

5. Write all rows at once

writer.writerows(rows)

This writes every row from the rows list into the file.

After that, the file is ready to use.

Expected file content

After running the script, the file people.csv should contain:

name,age,city
Alice,25,London
Bob,30,Paris
Charlie,22,Berlin

You can open this file in:

  • A text editor
  • Excel
  • Google Sheets
  • Other spreadsheet programs

To run the script, you can use:

python your_script.py

Then check the file content with one of these commands:

type people.csv
cat people.csv

Useful beginner variations

Write one row at a time

If you want to write rows one by one, use writer.writerow(...) instead of writer.writerows(...).

import csv

with open("people.csv", "w", newline="", encoding="utf-8") as file:
    writer = csv.writer(file)

    writer.writerow(["name", "age", "city"])
    writer.writerow(["Alice", 25, "London"])
    writer.writerow(["Bob", 30, "Paris"])
  • writerow() writes one row
  • writerows() writes many rows

If you want a step-by-step guide, see How to write a CSV file in Python.

Change the file name

You can create a different CSV file by changing the file name:

with open("students.csv", "w", newline="", encoding="utf-8") as file:

Replace the example data

You can swap the sample rows with your own data:

rows = [
    ["product", "price", "stock"],
    ["Pen", 1.5, 100],
    ["Notebook", 3.0, 50]
]

Write data from another part of your program

You can build the rows list from:

  • User input
  • Calculations
  • API results
  • Data read from another file

If you want to add new rows without replacing the old file, see How to append to a file in Python.

When this example is useful

This example is helpful when you need to:

  • Save simple table data to a file
  • Export results from a Python script
  • Create spreadsheet-friendly output
  • Learn the difference between plain text files and structured CSV files

A matching next step is reading CSV files back into Python. For that, see the Python CSV reader example.

Common mistakes

Here are some common problems beginners run into.

Forgetting to import csv

If you use csv.writer() without importing csv, Python will raise an error.

Make sure this line is at the top:

import csv

You can quickly test the module with:

python -c "import csv; print('csv module loaded')"

Opening the file without newline=""

Without newline="", some systems may create extra blank lines in the CSV output.

Use:

open("people.csv", "w", newline="", encoding="utf-8")

Overwriting an existing file by mistake

Using "w" replaces the old file content.

If people.csv already exists, it will be overwritten.

Passing the wrong data shape

This works:

rows = [
    ["name", "age"],
    ["Alice", 25]
]

This is not a proper list of rows:

rows = ["name", "age", "Alice", 25]

A CSV writer expects each row to be a separate list or iterable.

Trying to write unsupported custom objects

CSV files work best with simple values such as:

  • Strings
  • Integers
  • Floats

If you try to write custom objects directly, the output may not be what you expect. Convert values to simple text or numbers first.

File and permission problems

If Python cannot create or write the file, you may see an error such as:

FAQ

What is the difference between writerow() and writerows()?

writerow() writes one row.

writerows() writes multiple rows from a list or other iterable.

Why use newline="" when opening a CSV file?

It prevents extra blank lines from appearing in the output on some operating systems.

Can I write dictionaries to a CSV file?

Yes, but that is usually done with csv.DictWriter, which is better covered separately than in this basic example.

Will this overwrite an existing file?

Yes. Opening a file with "w" replaces the old content. Use append mode if you want to add rows instead.

See also