Algo. et prog. 2 en
Logo de Python
Arnaud COUTURIER - Python 3.10

Manipulation de fichiers texte

La fonction built-in open() renvoie un objet de type fichier et est le plus souvent utilisée avec deux arguments positionnels et un argument nommé:


		open(filename, mode='r', encoding=None)
	

Exemple:


		f = open('mon fichier.txt', 'w', encoding="utf-8")
	

Le premier argument est une chaîne contenant le chemin et le nom du fichier. Le deuxième argument est une autre chaîne contenant quelques caractères décrivant la façon dont le fichier est utilisé. mode peut être 'r' quand le fichier n'est accédé qu'en lecture, 'w' en écriture seulement (un fichier existant portant le même nom sera alors écrasé) et 'a' ouvre le fichier en mode ajout (toute donnée écrite dans le fichier est automatiquement ajoutée à la fin). 'r+' ouvre le fichier en mode lecture/écriture. L'argument mode est optionnel, sa valeur par défaut est 'r'.

Normalement, les fichiers sont ouverts en mode texte, c'est-à-dire que vous lisez et écrivez des chaînes de caractères depuis et dans ce fichier, suivant un encodage donné via le paramètre encoding. Si encoding n'est pas spécifié, l'encodage par défaut dépend de la plateforme. UTF-8 étant le standard moderne par défaut, spécifier encoding="utf-8" est recommandé à moins que vous ne sachiez que vous devez utiliser un autre encodage. L’ajout d’un 'b' au mode ouvre le fichier en mode binaire. Les données en mode binaire sont lues et écrites sous forme d’objets de type bytes. Vous ne pouvez pas spécifier encoding lorsque vous ouvrez un fichier en mode binaire.

En mode texte, le comportement par défaut, à la lecture, est de convertir les fin de lignes spécifiques à la plateforme (\n sur Unix, \r\n sur Windows, etc.) en simples \n. Lors de l'écriture, le comportement par défaut est d'appliquer l'opération inverse : les \n sont convertis dans leur équivalent sur la plateforme courante. Ces modifications effectuées automatiquement sont normales pour du texte, mais détérioreraient des données binaires contenues dans un fichier de type JPEG ou EXE. Soyez particulièrement attentifs à ouvrir ces fichiers binaires en mode binaire.

Vous devez appeler la méthode close() de l'objet fichier pour le fermer, et ainsi immédiatement libérer les ressources qu'il utilise. Après la fermeture du fichier toute tentative d'utilisation de l'objet fichier (lecture ou écriture) échoue systématiquement.

Méthodes des objets fichiers

Dans les exemples de code suivant on suppose qu'un objet fichier référencé par l'identifiant f a déjà été créé.

Pour lire le contenu d'un fichier, appelez f.read(taille), cette dernière lit une certaine quantité de données et la renvoie sous forme de chaîne (en mode texte) ou d'objet bytes (en mode binaire). taille est un argument numérique facultatif. Lorsque taille est omis ou négatif, la totalité du contenu du fichier sera lue et renvoyée, attention donc à ne pas lire des fichiers plus grands que la quantité de mémoire disponible, sinon une exception sera lancée. Si taille référence un entier positif, au maximum taille caractères (en mode texte) ou taille octets (en mode binaire) sont lus et renvoyés. Si la fin du fichier est atteinte, f.read() renvoie une chaîne vide.


		>>> f.read()
		'Ceci est le contenu complet du fichier texte.\n'

		>>> f.read()
		''
	

f.readline() lit une seule ligne du fichier. Un caractère de fin de ligne (\n) est laissé à la fin de la chaîne. Si f.readline() renvoie une chaîne vide, c'est que la fin du fichier a été atteinte, alors qu'une ligne vide est représentée par '\n' (une chaîne de caractères ne contenant qu'une fin de ligne).


		>>> f.readline()
		'Première ligne du fichier texte.\n'

		>>> f.readline()
		'Seconde et dernière ligne'

		>>> f.readline()
		''
	

Pour lire ligne par ligne, vous pouvez aussi boucler sur l'objet fichier. C'est plus efficace en termes de gestion mémoire, plus rapide et donne un code plus simple :


		for ligne_de_texte in f:
			print(ligne_de_texte, end='')
	

Affichage:


		Première ligne du fichier texte.
		Seconde et dernière ligne
	

Pour construire une liste avec toutes les lignes d'un fichier, il est aussi possible d'utiliser list(f) ou f.readlines().

f.write(chaine) écrit le contenu de chaine dans le fichier et renvoie le nombre de caractères écrits.


		>>> f.write('Du texte\n')
		9
	

Les fichiers disposent de méthodes supplémentaires. Consultez la référence de la bibliothèque standard pour avoir un guide complet des objets fichiers.