5.8 fileinput --- Itération sur des lignes lues depuis des flux d'entrée multiples

Ce module implémente une classe d'aide et des fonctions pour écrire rapidement une boucle sur l'entrée standard ou une liste de fichiers.

L'utilisation typique est:

import fileinput
for ligne in fileinput.input():
    process(ligne)

Ceci provoque une itération sur les lignes de tous les fichiers listés dans sys.argv[1:], avec une valeur par défaut de sys.stdin si la liste est vide. Si un nom de fichier vaut '-', il est aussi remplacé par sys.stdin. Pour spécifier une autre liste de fichiers, il faut la passer en premier argument à input(). Un nom de fichier unique est aussi autorisé.

Tous les fichiers sont ouverts en mode texte. Si une erreur d'entrée/sortie se produit à l'ouverture ou à la lecture d'un fichier, IOError est déclenchée.

Si sys.stdin est utilisé plus d'une fois, la seconde utilisation et les suivantes ne retourneront pas de ligne, sauf peut-être en utilisation interactive, ou si l'entrée standard a été explicitement réinitialisée (par exemple par sys.stdin.seek(0)).

Les fichiers vides sont ouverts et fermés immédiatement; la seule fois où on s'aperçoit de leur présence dans la liste des noms de fichiers est quand le dernier fichier ouvert est vide.

Il est possible que la dernière ligne d'un fichier ne se termine pas par un caractère de retour à la ligne; les lignes sont retournées en incluant le caractère de retour à la ligne quand il est présent en fin de ligne.

La fonction suivante constitue l'interface principale de ce module:

input([fichiers[, surplace[, sauvegarde]]])
Crée une instance de la classe FileInput. Cette instance sera utilisée comme l'état global pour les fonctions de ce module, et est aussi retournée pour être utilisée pendant l'itération.

Les fonctions suivantes utilisent l'état global créé par input(); s'il n'y a pas d'état actif, RuntimeError est déclenchée.

filename()
Retourne le nom du fichier en cours de lecture. Avant que la première ligne n'ait été lue, retourne None.

lineno()
Retourne le numéro cumulé de la ligne qui vient d'être lue. Avant que la première ligne n'ait été lue, retourne 0. Après que la dernière ligne du dernier fichier a été lue, retourne le numéro de cette ligne.

filelineno()
Retourne le numéro de ligne dans le fichier courant. Avant que la première ligne n'ait été lue, retourne 0. Après que la dernière ligne du dernier fichier a été lue, retourne le numéro de cette ligne dans le fichier.

isfirstline()
Retourne vrai si la ligne qui vient d'être lue est la première de son fichier, sinon retourne faux.

isstdin()
Retourne vrai si la dernière ligne a été lue depuis sys.stdin, sinon retourne faux.

nextfile()
Ferme le fichier courant de façon que l'itération suivante sera lue depuis le fichier suivant (s'il y en a un); les lignes non lues depuis ce fichier ne compteront pas dans le cumul du comptage de lignes. Le nom de fichier n'est pas modifié jusqu'à ce que la première ligne du fichier suivant ne soit lue. Avant que la première ligne n'ait été lue, cette fonction n'a aucun effet; on ne peut pas l'utiliser pour sauter le premier fichier. Après que la dernière ligne du dernier fichier a été lue, cette fonction n'a pas d'effet.

close()
Ferme la séquence.

La classe qui implémente le comportement de la séquence fournie par ce module peut aussi être surclassée:

FileInput([fichiers[, surplace[, sauvegarde]]])
La classe FileInput constitue l'implementation; ses méthodes filename(), lineno(), fileline(), isfirstline(), isstdin(), nextfile() et close() correspondent aux fonctions de même nom dans le module. Elle possède en outre une méthode readline() qui retourne la ligne d'entrée suivante, et une méthode __getitem__() qui implémente le comportement de la séquence. La séquence doit être traitée dans un ordre strictement séquentiel; l'accès aléatoire et readline() ne peuvent pas être mélangés.

Filtrage sur place optionnel: si l'argument surplace=1 est passé à input() ou au constructeur de FileInput, le fichier est déplacé dans un fichier de sauvegarde et la sortie standard est dirigée vers le fichier d'entrée. Cela permet d'écrire un filtre qui réécrit son fichier d'entrée sur place. Si l'argument sauvegarde='.<extension quelconque>' est également fourni, il spécifie l'extension à donner au fichier de sauvegarde, et le fichier de sauvegarde est conservé; par défaut, l'extension est '.bak' et il est détruit quand le fichier de sortie est fermé. Le filtrage sur place est désactivé quand on lit sur l'entrée standard.

Attention: L'implémentation actuelle ne fonctionne pas avec le système de fichiers MS-DOS 8+3.