AMU :: Polytech Biotech 3A :: JGB53D :: 2014/2015 :: Jacques van Helden, Denis Puthier, Nicolas Terrapon

Contenu

En programmation, il est souvent nécessaire de lire le contenu de fichiers. Les informations lues peuvent alors être stockées dans des variables (cf TD4) et analysées par l'utilisation de structures conditionelles et de boucles itératives (cf TD5). Finalement, on sauvegarde généralement les résultats de ces analyses en les écrivant directement via Python dans un fichiers.


La classe file

Jusqu'à présent, nous avons vu comment écrire sur la sortie standard (fonction print()) et comment lire depuis l'entrée standard (fonction input()). Ces échanges de flux de données peuvent aussi s'appliquer aux fichiers stockés sur l'ordinateur.

Fonction open

Avant de pouvoir lire et écrire dans un fichier, vous devez créer l'objet Python qui servira de lien avec le fichier résidant sur votre machine. Pour cela, on utilise la fonction Python open(), qui prend en argument la localisation (relative ou absolue) du fichier ainsi que le mode d'ouverture. La fonction open renvoie alors un objet de type file. Une fois l'objet créé, vous pourrez appeler ses méthodes pour lire ou écrire. Finalement, la fonction close() permet de terminer la connexion avec le fichier.

In [1]:
##############################################################
##  Exemple d'ouverture d'un fichier en lecture             ##
##############################################################

file_handler = open('results.txt', 'w')

Modes d'ouverture

Le deuxième paramètre de la fonction open - attendu sous forme d'une chaine de charactère - lui indique le mode de traitement du fichier. Les trois principaux modes sont 'r' pour read,'w' pour write, et 'a' pour append. Il est également possible d'utiliser des modes plus complexes (lecture+écriture ou encore binaire), décrits dans le tableau ci-dessous.

Operateur Description
r  Ouvre un fichier en lecture uniquement. Le pointeur est placé au début du fichier. C'est la valeur par défault.
w Ouvre un fichier en écriture uniquement. Écrase le contenu du fichier s'il existe déjà, crée un nouveau fichier sinon. Le pointeur est placé au début du fichier.
a Ouvre un fichier en écriture uniquement. Le pointeur est placé à la fin du fichier s'il existe, sinon un nouveau fichier est créé.
rb ou wb ou ab Ouvre le fichier en mode binaire (lecture des octets au lieu des caractères).
r+ ou w+ ou a+ Ouvre le fichier en lecture et en écriture.

Lire ou écrire dans un fichier

Pour illustrer cette partie, placez-vous dans le dossier contenant le fichier refGene_hg38.gtf et créez un nouveau script Python dans Geany. Créez également un fichier contenant les 5 premières lignes du fichier refGene_hg38.txt pour vos tests (Conseil: en lignes avec la commande head et l'opérateur de redirection ">").

Lire un fichier

Après avoir ouvert un fichier en mode lecture, plusieurs fonctions vous permettent d'en stocker le contenu.

La méthode la plus classique est de parcourir les lignes à l'aide d'une boucle for.

###########################################
##  Boucles sur les lignes d'un fichier  ##
###########################################

for line in file_handler:
    print(line)

Il existe cependant d'autres approches. Certaines sont présentées ci-dessous.

#########################################
# Ouverture du fichier  en mode lecture #
#########################################

file_handler = open('refGene_hg38.gt', 'r')

################################################################
# Copie l'intégralité du fichier dans un chaine de caractères  #
################################################################

file_content = file_handler.read()

##########################################################################
# Copie l'intégralité du fichier dans une liste (un élément = une ligne) #
##########################################################################

file_content = file_handler.readlines()

##############################################################################
#Copie uniquement la ligne suivante du fichier dans une chaine de caractères #
##############################################################################

file_content = file_handler.readline()

################################################################################
# Copie un nombre donné de caractères du fichier dans une chaine de caractères #
################################################################################

file_content = file_handler.read(6)


Écrire dans un fichier

Après avoir ouvert un fichier en mode écriture, plusieurs fonctions vous permettent d'écrire du contenu. Deux exemples sont donnés ci-dessous. Vous pouvez vérifiez que l'écriture est effective soit (i) en ouvrant dans un éditeur de texte ce fichier; (i) en utilisant Python pour lire dans ce fichier. Dans le cas de l'utilisation de Python, pensez à deplacer le pointeur de lecture en début de fichier en ouvrant un nouveau flux de lecture, ou en utilisant la fonction seek si vous avez ouvert le fichier en mode écriture et lecture.

In [8]:
#######################################
##  Écrire une chaine de caractères  ##
#######################################

file_handler_out = open("results.txt", "w")
file_handler_out.write("Un essai...")
Out[8]:
11

Fermeture du fichier

Il est important de penser à fermer le fichier. Un oubli peut amener des problèmes lorsque le fichier doit être ouvert en lecture/écriture dans d'autres parties du programme.

file_handler.close()
file_handler_out.close()