5 Best Ways to Write a List of Lists to CSV in Python

πŸ’‘ Problem Formulation: Writing a list of lists to a CSV file in Python is a common task when dealing with data exportation or data transformation tasks. The goal is to translate a Python data structureβ€”a list of lists, where each sublist represents a rowβ€”into a CSV format where each row corresponds to one sublist, and each item in the sublist is a separate field. For example, given input [["Name", "Age"], ["Alice", 30], ["Bob", 25]], the expected CSV output would be:

Name, Age
Alice, 30
Bob, 25

Method 1: Using python’s csv module

The csv module in Python provides a straightforward way to write lists of lists to a CSV file. It is designed specifically for this purpose and handles various CSV formatting options. It is simple to use and can be customized to handle different delimiters and quoting behaviors.

Here’s an example:

import csv

data = [["Name", "Age"], ["Alice", 30], ["Bob", 25]]
with open('people.csv', 'w', newline='') as file:
    writer = csv.writer(file)
    writer.writerows(data)

Output of this code snippet:

Name,Age
Alice,30
Bob,25

This code snippet opens a file called people.csv in write mode and uses the csv.writer() object to write rows to it. The writerows() method is particularly useful for writing multiple rows at once.

Method 2: Using pandas DataFrame

pandas is a powerful data manipulation library that offers a DataFrame object which is perfect for dealing with tabular data. Writing a list of lists to a CSV file using pandas is highly efficient and requires minimal code. It also allows for more complex data manipulations before the export.

Here’s an example:

import pandas as pd

data = [["Name", "Age"], ["Alice", 30], ["Bob", 25]]
df = pd.DataFrame(data[1:], columns=data[0])
df.to_csv('people.csv', index=False)

Output of this code snippet:

Name,Age
Alice,30
Bob,25

In this example, a pandas.DataFrame is created from the list of lists, specifying the first list as column headers with data[0] and the remaining lists as data with data[1:]. The to_csv() method writes the DataFrame to a CSV file without the index.

Method 3: Using List Comprehension and join()

If external libraries are not an option, using list comprehension combined with the join() method is a nifty way to transform a list of lists into a CSV formatted string which can then be written to a file. This method allows for easy customization of the CSV formatting directly within the Python code.

Here’s an example:

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

with open('people.csv', 'w') as file:
    file.writelines(','.join(map(str, row)) + '\n' for row in data)

Output of this code snippet:

Name,Age
Alice,30
Bob,25

The provided code snippet demonstrates iterating through each row in the data list and creating a comma-separated string from each list, converting each element to a string if necessary. Then, it writes each string to a new line in the file.

Method 4: Using the openpyxl library for Excel CSV

The openpyxl library is aimed at working with Excel files, but it can also be used to write CSV files, particularly when you need better control over the formatting, such as cell styles or number formats, or when working with larger Excel files and converting to CSV.

Here’s an example:

from openpyxl import Workbook
import csv

data = [["Name", "Age"], ["Alice", 30], ["Bob", 25]]
wb = Workbook()
ws = wb.active

for row in data:
    ws.append(row)
    
with open('people.csv', 'w', newline="") as f:
    c = csv.writer(f)
    for r in ws.rows:
        c.writerow([cell.value for cell in r])

Output of this code snippet:

Name,Age
Alice,30
Bob,25

In this method, an Excel workbook and worksheet are created in memory using openpyxl. Each list from data is appended as a row to the worksheet. Then, using Python’s built-in csv module, the worksheet’s rows are written to the CSV file.

Bonus One-Liner Method 5: Using csv.writer() in a single line

For those who prefer concise code, Python’s ability to condense operations into a single line comes in handy. Using csv.writer() in a single line is not only terse but also maintains readability for simple cases.

Here’s an example:

import csv

data = [["Name", "Age"], ["Alice", 30], ["Bob", 25]]
with open('people.csv', 'w', newline='') as file: csv.writer(file).writerows(data)

Output of this code snippet:

Name,Age
Alice,30
Bob,25

This one-liner opens the file and writes the rows in a single chained command. This method combines creating the csv.writer object and calling writerows() on the same line for brevity.

Summary/Discussion

  • Method 1: Python’s csv module. Ideal for CSV-specific tasks. May lack certain advanced features.
  • Method 2: pandas DataFrame. Highly efficient and versatile. May be overkill for simple tasks and introduces an external dependency.
  • Method 3: List Comprehension and join(). Good for environments where dependencies are restricted. Can become unwieldy with complex data structures.
  • Method 4: openpyxl library. Best for when CSV conversion is part of a larger Excel-based task. Adds an external dependency and may be less efficient for simple CSV writing.
  • Method 5: CSV writer one-liner. Straightforward and concise. Offers less clarity and customization for more complicated scenarios.