2.1.7.9 Objets fichiers

Les objets fichiers sont implémentés avec les fonctions stdio de la librairie C et peuvent être créés avec la fonction intégrée open() décrite dans la section 2.3, ``Fonctions intégrées''. Ces objets sont aussi retournés par d'autres fonctions intégrées, telles que: os.popen() et os.fdopen() et la méthode makefile() des objets sockets.

Quand une opération sur les fichiers échoue, pour une cause relative aux entrées/sorties, l'exception IOError est levée. Ceci comprend les situations pour lesquelles l'opération n'est pas définie, pour diverses raisons. Par exemple lors de l'utilisation de la méthode seek() sur un périphérique tty ou encore lors d'une opération d'écriture sur un fichier ouvert en lecture.

Les fichiers possèdent les méthodes suivantes:

fileclose()
Ferme le fichier. Un fichier fermé ne peut plus être lu ou écrit.

fileflush()
Vide le buffer interne, comme la fonction fflush() de stdio.

fileisatty()
Retourne 1 si le fichier est connecté à un périphérique de type tty, sinon retourne 0.

filefileno()
Retourne l'entier ``descripteur de fichier'' qui est utilisé par les couches inférieures du système d'exploitation. Cette valeur peut être utilisée pour d'autres fonctions de bas niveau, telles que dans le module fcntl ou les fonctions os.read() et autres.

fileread([longueur])
Lit au moins longueur octets du fichier (il peut y en avoir moins si le caractère EOF est lu avant d'atteindre longueur). Si l'argument longueur est négatif ou bien absent, toutes les données sont lues jusqu'à EOF. Les octets sont retournés sous forme d'un objet chaîne de caractères. Une chaîne vide est retournée quand EOF est rencontré le premier (pour certains types de fichiers, tels les ttys, il est raisonnable de continuer à lire même après le retour d'un EOF). Il faut noter que la fonction C fread() peut être appelée plusieurs fois pour atteindre le nombre longueur d'octets demandés.

filereadline([taille])
Lit une ligne entière du fichier. Le caractère retour-chariot en fin de ligne est conservé1 mais il peut aussi être absent dans le cas où le fichier se termine par une ligne incomplète. Si l'argument taille est présent et non-négatif, il indique le nombre maximum d'octets à lire (y compris le retour-chariot de fin) et une ligne incomplète peut alors être retournée. Une chaîne vide est retournée si EOF est rencontré comme premier caractère. Note: Contrairement à la fonction fgets() de stdio, la chaîne retournée peut contenir des caractères nuls ('\0') si ceux-ci se trouvent dans le fichier.

filereadlines([longueur])
Lit l'entrée jusqu'à EOF, en utilisant readline() et retourne une liste contenant les lignes lues. Si l'argument optionnel longueur est présent, les lignes sont lues jusqu'à un total de longueur octets, sans se soucier de EOF. Cette longueur peut être approximative en ce sens qu'elle dépend de valeurs internes de taille de buffer.

fileseek(offset[, positionnement])
Fixe la position du curseur dans le fichier lu, comme la fonction fseek() de stdio. L'argument optionnel positionnement (par défaut 0, c'est à dire position absolue dans le fichier) peut prendre les valeurs 0, 1 (déplacement relatif à la position précédente), ou 2 (positionnement relatif à la fin de fichier). Il n'y a pas de valeur de retour.

filetell()
Retourne la position courante du curseur dans le fichier, comme ftell() de stdio.

filetruncate([longueur])
Réduit la taille du fichier. Si l'argument longueur est présent, le fichier est tronqué à (au plus) cette taille ; par défaut la longueur correspond à la position courante. Cette fonction est disponible ou pas selon la version du système d'exploitation (par exemple, toutes les versions d'Unix ne la supportent pas)

filewrite(str)
Ecrit un chaîne de caractères dans le fichier. Il n'y a pas de valeur de retour. Note: A cause de l'utilisation d'un buffer, la chaîne peut ne pas être vraiment dans le fichier avant une commande flush() ou close().

filewritelines(list)
Ecrit une liste de chaîne de caractères dans le fichier. Il n'y a pas de valeur de retour (cette méthode est le miroir de readlines()). Aucun séparateur de ligne n'est ajouté par writelines().

Les objets fichiers possèdent également les attributs suivants:

fileclosed
Attribut booléen en lecture seule, indique l'état de l'objet fichier. La méthode close() change sa valeur.

filemode
Mode d'entrée/sortie du fichier, si le fichier est créé avec la fonction intégrée open() l'attribut existe et possède la valeur passée. Cet attribut est en lecture seule.

filename
Si le fichier est créé avec open(), l'attribut en lecture seule contient le nom du fichier. Sinon, il contient une chaîne de caractères indiquant l'origine de l'objet fichier, de la forme "<...>".

filesoftspace
Booléen indiquant si un espace doit être imprimé avant toute autre valeur lors de l'utilisation de print. Les classes qui simulent un objet fichier doivent avoir un attribut softspace accessible en écriture, et initialisé à zéro. Ceci est automatique pour les classes implémentées en Python, mais les types implémentés en C doivent veiller à fournir cet attribut softspace en écriture.




Notes

1
Un des avantages de conserver ce caractère retour-chariot est de signaler sans ambiguïté qu'une chaîne de caractères vide signifie EOF. Un autre avantage, pour le cas où ceci serait utile, par exemple pour recopier exactement un fichier sans passer les lignes en revue, est qu'on peut savoir si la dernière ligne d'un fichier se termine ou non par un retour-chariot (les deux cas existent!).