Articles

Lecture et écriture de listes dans un fichier en Python

En tant que structures de données sérialisées, les programmeurs Python utilisent intensivement des tableaux, des listes et des dictionnaires. Le stockage de ces structures de données nécessite de manière persistante un fichier ou une base de données pour fonctionner. Cet article décrit comment écrire une liste dans un fichier et comment relire cette liste en mémoire.

Pour écrire des données dans un fichier et lire les données d’un fichier, le langage de programmation Python propose les méthodes standard write() et read() pour traiter une seule ligne, ainsi que writelines() et readlines() pour traiter plusieurs lignes. De plus, le module pickle et le module json permettent également de gérer intelligemment les ensembles de données sérialisés.

En utilisant les méthodes de lecture et d’écriture

Pour traiter les caractères (chaînes), les méthodes de base fonctionnent très bien. L’enregistrement d’une telle liste ligne par ligne dans le fichier listfile.txt peut se faire comme suit:

# define list of placesplaces = with open('listfile.txt', 'w') as filehandle: for listitem in places: filehandle.write('%s\n' % listitem)

À la ligne 6, le listitem est prolongé par un saut de ligne « \n », d’une part, et stocké dans le fichier de sortie, d’autre part. Pour lire la liste complète du fichier listfile.txt de retour en mémoire ce code Python vous montre comment cela fonctionne:

# define an empty listplaces = # open file and read the content in a listwith open('listfile.txt', 'r') as filehandle: for line in filehandle: # remove linebreak which is the last character of the string currentPlace = line # add item to the list places.append(currentPlace)

Gardez à l’esprit que vous devrez supprimer le saut de ligne à la fin de la chaîne. Dans ce cas, cela nous aide que Python autorise également les opérations de liste sur les chaînes. À la ligne 8 du code ci-dessus, cette suppression se fait simplement comme une opération de liste sur la chaîne elle-même, qui conserve tout sauf le dernier élément. Cet élément contient le caractère « \n » qui représente le saut de ligne sur les systèmes UNIX/Linux.

Utilisation des méthodes writelines et readlines

Comme mentionné au début de cet article Python contient également les deux méthodes writelines() et readlines() pour écrire et lire plusieurs lignes en une seule étape, respectivement. Pour écrire la liste entière dans un fichier sur le disque, le code Python est le suivant:

# define list of placesplaces_list = with open('listfile.txt', 'w') as filehandle: filehandle.writelines("%s\n" % place for place in places_list)

Pour lire la liste complète d’un fichier sur disque, le code Python est le suivant:

# define empty listplaces = # open file and read the content in a listwith open('listfile.txt', 'r') as filehandle: filecontents = filehandle.readlines() for line in filecontents: # remove linebreak which is the last character of the string current_place = line # add item to the list places.append(current_place)

La liste ci-dessus suit une approche plus traditionnelle empruntée à d’autres langages de programmation. Pour l’écrire de manière plus pythonique, regardez le code ci-dessous:

# define empty listplaces = # open file and read the content in a listwith open('listfile.txt', 'r') as filehandle: places = 

Après avoir ouvert le fichier listfile.txt à la ligne 5, le rétablissement de la liste se fait entièrement à la ligne 6. Tout d’abord, le contenu du fichier est lu via readlines(). Deuxièmement, dans une boucle for de chaque ligne, le caractère de saut de ligne est supprimé à l’aide de la méthode rstrip(). Troisièmement, la chaîne est ajoutée à la liste des lieux en tant que nouvel élément de liste. En comparaison avec la liste avant le code est beaucoup plus compact, mais peut être plus difficile à lire pour les programmeurs Python débutants.

En utilisant le module pickle

Les différentes méthodes expliquées jusqu’à présent stockent la liste de manière à ce que les humains puissent toujours la lire. Dans le cas où cela n’est pas nécessaire, le module pickle peut devenir très pratique pour vous. Sa méthode dump() stocke efficacement la liste sous forme de flux de données binaires. Tout d’abord, à la ligne 7 (dans le code ci-dessous), le fichier de sortie listfile.data est ouvert pour l’écriture binaire (« wb »). Deuxièmement, à la ligne 9
, la liste est stockée dans le fichier ouvert en utilisant la méthode dump().

# load additional moduleimport pickle# define a list of placesplacesList = with open('listfile.data', 'wb') as filehandle: # store the data as binary data stream pickle.dump(placesList, filehandle)

À l’étape suivante, nous lisons la liste du fichier comme suit. Tout d’abord, le fichier de sortie listfile.data est ouvert en binaire pour la lecture (« rb ») à la ligne 4. Deuxièmement, la liste des lieux est chargée à partir du fichier en utilisant la méthode load().

# load additional moduleimport picklewith open('listfile.data', 'rb') as filehandle: # read the data as binary data stream placesList = pickle.load(filehandle)

Les deux exemples ici démontrent l’utilisation de chaînes. Bien que, pickle fonctionne avec toutes sortes d’objets Python tels que des chaînes, des nombres, des structures auto-définies et toutes les autres structures de données intégrées fournies par Python.

Utilisation du format JSON

Le format de données binaires utilisé par pickle est spécifique à Python. Pour améliorer l’interopérabilité entre les différents programmes, la notation d’objet JavaScript (JSON) fournit un schéma facile à utiliser et lisible par l’homme, et est donc devenue très populaire.

L’exemple suivant montre comment écrire une liste de types de variables mixtes dans un fichier de sortie à l’aide du module json. À la ligne 4, la liste de base est définie. Après avoir ouvert le fichier de sortie pour l’écriture à la ligne 7, la méthode dump() stocke la liste de base dans le fichier en utilisant la notation JSON.

import json# define list with valuesbasicList = # open output file for writingwith open('listfile.txt', 'w') as filehandle: json.dump(basicList, filehandle)

La lecture du contenu du fichier de sortie en mémoire est aussi simple que l’écriture des données. La méthode correspondante à dump() est nommée load(), et fonctionne comme suit:

import json# open output file for readingwith open('listfile.txt', 'r') as filehandle: basicList = json.load(filehandle)

Conclusion

Les différentes méthodes présentées ci-dessus vont de la simple écriture / lecture de données au dumping / chargement de données via des flux binaires utilisant pickle et JSON. Cela simplifie le stockage d’une liste de manière persistante et sa lecture en mémoire.

Remerciements

L’auteur tient à remercier Zoleka Hatitongwe pour son soutien lors de la préparation de l’article.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *