Python CSV: lecture et écriture de fichiers CSV

Dans ce tutoriel, nous allons apprendre à lire et à écrire dans des fichiers CSV en Python à l'aide d'exemples.

Un format CSV (valeurs séparées par des virgules) est l'un des moyens les plus simples et les plus courants de stocker des données tabulaires. Pour représenter un fichier CSV, il doit être enregistré avec l' extension de fichier .csv .

Prenons un exemple:

Si vous ouvrez le fichier CSV ci-dessus à l'aide d'un éditeur de texte tel que du texte sublime, vous verrez:

 SN, nom, ville 1, Michael, New Jersey 2, Jack, Californie 

Comme vous pouvez le voir, les éléments d'un fichier CSV sont séparés par des virgules. Voici ,un délimiteur.

Vous pouvez avoir n'importe quel caractère unique comme délimiteur selon vos besoins.

Remarque: Le module csv peut également être utilisé pour d'autres extensions de fichier (comme: .txt ) tant que leur contenu est dans la bonne structure.

Travailler avec des fichiers CSV en Python

Bien que nous puissions utiliser la open()fonction intégrée pour travailler avec des fichiers CSV en Python, il existe un csvmodule dédié qui facilite grandement le travail avec les fichiers CSV.

Avant de pouvoir utiliser les méthodes du csvmodule, nous devons d'abord importer le module en utilisant:

 import csv 

Lecture de fichiers CSV à l'aide de csv.reader ()

Pour lire un fichier CSV en Python, nous pouvons utiliser la csv.reader()fonction. Supposons que nous ayons un csvfichier nommé people.csv dans le répertoire courant avec les entrées suivantes.

Nom Âge Métier
Jack 23 Médecin
Meunier 22 Ingénieur

Lisons ce fichier en utilisant csv.reader():

Exemple 1: Lire CSV avec un séparateur virgule

 import csv with open('people.csv', 'r') as file: reader = csv.reader(file) for row in reader: print(row) 

Production

 ('Nom', 'Âge', 'Profession') ('Jack', '23', 'Docteur') ('Miller', '22', 'Ingénieur') 

Ici, nous avons ouvert le fichier people.csv en mode lecture en utilisant:

 with open('people.csv', 'r') as file:… 

Pour en savoir plus sur l'ouverture de fichiers en Python, visitez: Entrée / sortie de fichier Python

Ensuite, le csv.reader()est utilisé pour lire le fichier, ce qui retourne un readerobjet itérable .

L' readerobjet est ensuite itéré à l'aide d'une forboucle pour imprimer le contenu de chaque ligne.

Dans l'exemple ci-dessus, nous utilisons la csv.reader()fonction en mode par défaut pour les fichiers CSV ayant un séparateur virgule.

Cependant, la fonction est beaucoup plus personnalisable.

Supposons que notre fichier CSV utilise tab comme délimiteur. Pour lire de tels fichiers, nous pouvons passer des paramètres optionnels à la csv.reader()fonction. Prenons un exemple.

Exemple 2: Lire un fichier CSV avec un délimiteur de tabulation

 import csv with open('people.csv', 'r',) as file: reader = csv.reader(file, delimiter = ' ') for row in reader: print(row) 

Notez le paramètre facultatif delimiter = ' 'dans l'exemple ci-dessus.

La syntaxe complète de la csv.reader()fonction est:

 csv.reader(csvfile, dialect='excel', **optional_parameters) 

Comme vous pouvez le voir dans la syntaxe, nous pouvons également passer le paramètre dialecte à la csv.reader()fonction. Le dialectparamètre nous permet de rendre la fonction plus flexible. Pour en savoir plus, visitez: Lire des fichiers CSV en Python.

Écriture de fichiers CSV à l'aide de csv.writer ()

Pour écrire dans un fichier CSV en Python, nous pouvons utiliser la csv.writer()fonction.

La csv.writer()fonction renvoie un writerobjet qui convertit les données de l'utilisateur en une chaîne délimitée. Cette chaîne peut être utilisée ultérieurement pour écrire dans des fichiers CSV à l'aide de la writerow()fonction. Prenons un exemple.

Exemple 3: écrire dans un fichier CSV

 import csv with open('protagonist.csv', 'w', newline='') as file: writer = csv.writer(file) writer.writerow(("SN", "Movie", "Protagonist")) writer.writerow((1, "Lord of the Rings", "Frodo Baggins")) writer.writerow((2, "Harry Potter", "Harry Potter")) 

Lorsque nous exécutons le programme ci-dessus, un fichier protagonist.csv est créé avec le contenu suivant:

 SN, Film, Protagoniste 1, Le Seigneur des Anneaux, Frodo Baggins 2, Harry Potter, Harry Potter 

Dans le programme ci-dessus, nous avons ouvert le fichier en mode écriture.

Ensuite, nous avons passé chaque ligne sous forme de liste. Ces listes sont converties en une chaîne délimitée et écrites dans le fichier CSV.

Exemple 4: écriture de plusieurs lignes avec writerows ()

Si nous devons écrire le contenu de la liste bidimensionnelle dans un fichier CSV, voici comment nous pouvons le faire.

 import csv csv_rowlist = (("SN", "Movie", "Protagonist"), (1, "Lord of the Rings", "Frodo Baggins"), (2, "Harry Potter", "Harry Potter")) with open('protagonist.csv', 'w') as file: writer = csv.writer(file) writer.writerows(csv_rowlist) 

The output of the program is the same as in Example 3.

Here, our 2-dimensional list is passed to the writer.writerows() method to write the content of the list to the CSV file.

Example 5: Writing to a CSV File with Tab Delimiter

 import csv with open('protagonist.csv', 'w') as file: writer = csv.writer(file, delimiter = ' ') writer.writerow(("SN", "Movie", "Protagonist")) writer.writerow((1, "Lord of the Rings", "Frodo Baggins")) writer.writerow((2, "Harry Potter", "Harry Potter")) 

Notice the optional parameter delimiter = ' ' in the csv.writer() function.

The complete syntax of the csv.writer() function is:

 csv.writer(csvfile, dialect='excel', **optional_parameters) 

Similar to csv.reader(), you can also pass dialect parameter the csv.writer() function to make the function much more customizable. To learn more, visit: Writing CSV files in Python

Python csv.DictReader() Class

The objects of a csv.DictReader() class can be used to read a CSV file as a dictionary.

Example 6: Python csv.DictReader()

Suppose we have the same file people.csv as in Example 1.

Name Age Profession
Jack 23 Doctor
Miller 22 Engineer

Let's see how csv.DictReader() can be used.

 import csv with open("people.csv", 'r') as file: csv_file = csv.DictReader(file) for row in csv_file: print(dict(row)) 

Output

 ('Name': 'Jack', ' Age': ' 23', ' Profession': ' Doctor') ('Name': 'Miller', ' Age': ' 22', ' Profession': ' Engineer') 

As we can see, the entries of the first row are the dictionary keys. And, the entries in the other rows are the dictionary values.

Here, csv_file is a csv.DictReader() object. The object can be iterated over using a for loop. The csv.DictReader() returned an OrderedDict type for each row. That's why we used dict() to convert each row to a dictionary.

Notice that, we have explicitly used the dict() method to create dictionaries inside the for loop.

 print(dict(row)) 

Note: Starting from Python 3.8, csv.DictReader() returns a dictionary for each row, and we do not need to use dict() explicitly.

The full syntax of the csv.DictReader() class is:

 csv.DictReader(file, fieldnames=None, restkey=None, restval=None, dialect='excel', *args, **kwds) 

To learn more about it in detail, visit: Python csv.DictReader() class

Python csv.DictWriter() Class

The objects of csv.DictWriter() class can be used to write to a CSV file from a Python dictionary.

The minimal syntax of the csv.DictWriter() class is:

 csv.DictWriter(file, fieldnames) 

Here,

  • file - CSV file where we want to write to
  • fieldnames - a list object which should contain the column headers specifying the order in which data should be written in the CSV file

Example 7: Python csv.DictWriter()

 import csv with open('players.csv', 'w', newline='') as file: fieldnames = ('player_name', 'fide_rating') writer = csv.DictWriter(file, fieldnames=fieldnames) writer.writeheader() writer.writerow(('player_name': 'Magnus Carlsen', 'fide_rating': 2870)) writer.writerow(('player_name': 'Fabiano Caruana', 'fide_rating': 2822)) writer.writerow(('player_name': 'Ding Liren', 'fide_rating': 2801)) 

The program creates a players.csv file with the following entries:

 player_name,fide_rating Magnus Carlsen,2870 Fabiano Caruana,2822 Ding Liren,2801 

The full syntax of the csv.DictWriter() class is:

 csv.DictWriter(f, fieldnames, restval='', extrasaction='raise', dialect='excel', *args, **kwds) 

To learn more about it in detail, visit: Python csv.DictWriter() class

Using the Pandas library to Handle CSV files

Pandas is a popular data science library in Python for data manipulation and analysis. If we are working with huge chunks of data, it's better to use pandas to handle CSV files for ease and efficiency.

Before we can use pandas, we need to install it. To learn more, visit: How to install Pandas?

Once we install it, we can import Pandas as:

 import pandas as pd 

To read the CSV file using pandas, we can use the read_csv() function.

 import pandas as pd pd.read_csv("people.csv") 

Ici, le programme lit people.csv à partir du répertoire courant.

Pour écrire dans un fichier CSV, nous devons appeler la to_csv()fonction d'un DataFrame.

 import pandas as pd # creating a data frame df = pd.DataFrame((('Jack', 24), ('Rose', 22)), columns = ('Name', 'Age')) # writing data frame to a CSV file df.to_csv('person.csv') 

Ici, nous avons créé un DataFrame en utilisant la pd.DataFrame()méthode. Ensuite, la to_csv()fonction de cet objet est appelée, pour écrire dans person.csv .

Pour en savoir plus, visitez:

  • Python pandas.read_csv (site officiel)
  • Python pandas.pandas.DataFrame.to_csv (site officiel)

Articles intéressants...