web-dev-qa-db-fra.com

Comment lire et écrire des fichiers CSV avec Python?

J'ai un fichier example.csv avec le contenu

1,"A towel,",1.0
42," it says, ",2.0
1337,is about the most ,-1
0,massively useful thing ,123
-2,an interstellar hitchhiker can have.,3

Comment lire ce example.csv avec Python?

De même, si j'ai

data = [(1, "A towel,", 1.0),
        (42, " it says, ", 2.0),
        (1337, "is about the most ", -1),
        (0, "massively useful thing ", 123),
        (-2, "an interstellar hitchhiker can have.", 3)]

Comment écrire data dans un fichier CSV avec Python?

24
Martin Thoma

Voici quelques exemples minimaux et complets de lecture de fichiers CSV et d’écriture de fichiers CSV avec Python.

Python 2 + 3: Lecture d'un fichier CSV

Pur python

# -*- coding: utf-8 -*-

import csv
import sys

# Define data
data = [(1, "A towel,", 1.0),
        (42, " it says, ", 2.0),
        (1337, "is about the most ", -1),
        (0, "massively useful thing ", 123),
        (-2, "an interstellar hitchhiker can have.", 3)]

# Write CSV file
kwargs = {'newline': ''}
mode = 'w'
if sys.version_info < (3, 0):
    kwargs.pop('newline', None)
    mode = 'wb'

with open('test.csv', mode, **kwargs) as fp:
    writer = csv.writer(fp, delimiter=',')
    # writer.writerow(["your", "header", "foo"])  # write header
    writer.writerows(data)

# Read CSV file
kwargs = {'newline': ''}
mode = 'r'
if sys.version_info < (3, 0):
    kwargs.pop('newline', None)
    mode = 'rb'
with open('test.csv', mode, **kwargs) as fp:
    reader = csv.reader(fp, delimiter=',', quotechar='"')
    # next(reader, None)  # skip the headers
    data_read = [row for row in reader]

print(data_read)

Après cela, le contenu de data_read est

[['1', 'A towel,', '1.0'],
 ['42', ' it says, ', '2.0'],
 ['1337', 'is about the most ', '-1'],
 ['0', 'massively useful thing ', '123'],
 ['-2', 'an interstellar hitchhiker can have.', '3']]

Unicode et Python 2.X

Si vous voulez écrire en Unicode, vous devez installer unicodecsv. Ne pas ouvrez le fichier avec codecs.open mais simplement avec open. Écris-le avec

import unicodecsv as csv
# Write CSV file
with open('test.csv', 'w', newline='') as fp:
    writer = csv.writer(fp, encoding='utf-8')
    # writer.writerow(["your", "header", "foo"])  # write header
    writer.writerows(data)

En relation

mpu

Jetez un coup d’œil à mon paquet d’utilitaire mpu pour un modèle simple et facile à mémoriser:

import mpu.io
data = mpu.io.read('example.csv', delimiter=',', quotechar='"', skiprows=None)
mpu.io.write('example.csv', data)

Pandas

import pandas as pd

# Read the CSV into a pandas data frame (df)
#   With a df you can do many things
#   most important: visualize data with Seaborn
df = pd.read_csv('myfile.csv', sep=',')
print(df)

# Or export it in many ways, e.g. a list of tuples
tuples = [Tuple(x) for x in df.values]

# or export it as a list of dicts
dicts = df.to_dict().values()

Voir read_csv docs pour plus d’informations. Veuillez noter que les pandas déduisent automatiquement s'il y a une ligne d'en-tête, mais vous pouvez aussi la définir manuellement.

Si vous n'avez pas entendu parler de Seaborn , je vous recommande de jeter un coup d'œil.

Autre

La lecture de fichiers CSV est prise en charge par de nombreuses autres bibliothèques, par exemple:

Fichier CSV créé

1,"A towel,",1.0
42," it says, ",2.0
1337,is about the most ,-1
0,massively useful thing ,123
-2,an interstellar hitchhiker can have.,3

Terminaisons de fichier communes

.csv

Travailler avec les données

Après avoir lu le fichier CSV dans une liste de tuples/dicts ou dans un cadre de données Pandas, vous travaillez simplement avec ce type de données. Rien de spécifique CSV.

Des alternatives

Pour votre application, les éléments suivants peuvent être importants:

  • Prise en charge par d'autres langages de programmation
  • Lecture/écriture
  • Compacité (taille de fichier)

Voir aussi: Comparaison des formats de sérialisation des données

Si vous cherchez plutôt un moyen de créer des fichiers de configuration, vous pouvez lire mon court article Fichiers de configuration en Python

31
Martin Thoma

Écrire un fichier CSV

D'abord, vous devez importer le csv

Par exemple:

import csv

with open('eggs.csv', 'wb') as csvfile:
    spamwriter = csv.writer(csvfile, delimiter=' ',
                        quotechar='|', quoting=csv.QUOTE_MINIMAL)
    spamwriter.writerow(['Spam'] * 5 + ['Baked Beans'])
    spamwriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])
2
Syed Abdul Rehman
import csv
with open(fileLocation+'example.csv',newline='') as File: #the csv file is stored in a File object

    reader=csv.reader(File)       #csv.reader is used to read a file
    for row in reader:
        print(row)
0