1.9. Fichiers

# Afficher la table des matières

from jyquickhelper import add_notebook_menu
add_notebook_menu()
run previous cell, wait for 2 seconds

L’écriture et la lecture dans un fichier s’effectuent toujours de la même manière. On ouvre le fichier en mode écriture ou lecture, on écrit ou on lit, puis on ferme le fichier, le laissant disponible pour une utilisation ultérieure. Ce paragraphe ne présente pas l’écriture ou la lecture dans un format binaire car celle-ci est peu utilisée dans ce langage.

Dans cette partie, on prend l’exemple d’un fichier SerieTV.txt ayant le contenu suivant :

walking dead

Black Mirror

Narcos

Game of Thrones

1.9.1. Lecture dans un fichier texte

La lecture dans un fichier texte s’effectue selon le même schéma :

f = open('files/SerieTV.txt','r') #f = open(' nom_du_fichier.txt ','r')
lignes =f.readlines ()
f.close ()
  • Ouverture du fichier : open(nom,mode)

    • nom : chaîne de caractère, nom du fichier

    • mode : chaîne de caractères, accès au fichier (’r’ : read, ’w’ : write, ’a’ : append)

  • Lecture ligne par ligne ; La ligne est affectée à une variable texte

  • Principales méthodes :

    • read() Lit tout le fichier (jusqu’à EOF) et renvoie un str

    • read(n) Lit n caractères du fichier à partir de la position courante

    • readline() Lit une ligne du fichier jusqu’à nn et renvoie la chaîne

    • readlines() Lit toutes les lignes du fichier, renvoie un objet list

  • Fermeture du fichier

1.9.1.1. Méthodes seek() et tell()**

Les méthodes seek() et tell() permettent respectivement de se déplacer au n ième caractère (plus exactement au n ième octet) d’un fichier et d’afficher où en est la lecture du fichier, c’est-à-dire quel caractère (ou octet) est en train d’être lu.

f1 = open('files/SerieTV.txt', 'r')
f1.readline()
'walking dead\n'
f1.tell()
14
f1.seek(0)
f1.tell()
0
f1.readline()
'walking dead\n'
f1.readline()
'Black Mirror \n'
f1.close()

On remarque qu’à l’ouverture d’un fichier, le tout premier caractère est indexé par 0 (tout comme le premier élément d’une liste). La méthode seek() permet facilement de remonter au début du fichier lorsque l’on est arrivé à la fin ou lorsqu’on en a lu une partie.

1.9.1.2. Itérations directement sur le fichier**

Il existe également un moyen à la fois simple et élégant de parcourir un fichier.

f1 = open('files/SerieTV.txt', 'r')
for ligne in f1:
    print(ligne)
    

f1.close()
Game of Thrones

Breaking Bad

The Walking Dead

Dexter

7Affiche Friends

Friends

House of Cards

Lost, les disparus

La boucle for va demander à Python d’aller lire le fichier ligne par ligne.

1.9.2. Ecriture dans un fichier texte

La syntaxe d’écriture dans un fichier est la suivante :

f = open ("nom-fichier.txt", "w") # ouverture en mode écriture "w" ou écriture ajout "a"
s = " Bonjour"
s2 = "Comment tu vas ?"
f.write ( s ) # écriture de la chaîne de caractères s
f.write ( s2 ) # écriture de la chaîne de caractères s2
#...
f.close () # fermeture

Certains codes sont très utiles lors de l’écriture de fichiers texte comme :

\n : passage à la ligne

\t : insertion d’une tabulation, indique un passage à la colonne suivante dans le logiciel Excel

1.9.3. Lecture et ecriture d’un fichier CSV

import csv
def read_csv_file ( filename ):
    """ Lire un fichier CSV et ecrire chaque ligne sous
    forme de liste """
    f = open( filename)
    for row in csv.reader (f):
        print( row )
        f. close()
import csv
def read_csv_file1 ( filename ):
    """ Lire un fichier CSV et ajouter les elements a la liste . """
    f = open( filename )
    data = []
    for row in csv.reader (f):
        data.append ( row )
        print(data)
        f.close()
def write_csv(filename):
    import csv
    L = [['Date', 'Nom', 'Notes'],
         ['2016/1/18', 'Martin Luther King Day', 'Federal Holiday'],
         ['2016/2/2','Groundhog Day', 'Observance'],
         ['2016/2/8','Chinese New Year', 'Observance'],
         ['2016/2/14','Valentine\'s Day', 'Obervance'],
         ['2016/5/8','Mother\'s Day', 'Observance'],
         ['2016/8/19','Statehood Day', 'Hawaii Holiday'],
         ['2016/10/28','Nevada Day', 'Nevada Holiday']]
    f = open(filename, 'w', newline='')
    for item in L:
        csv.writer(f).writerow(item)
    f.close()

1.9.4. Méthode optimisée d’ouverture et de fermeture de fichier

Depuis la version 2.5, Python introduit le mot-clé with qui permet d’ouvrir et fermer un fichier de manière commode. Si pour une raison ou une autre l’ouverture conduit à une erreur (problème de droits, etc), l’utilisation de with garantit la bonne fermeture du fichier (ce qui n’est pas le cas avec l’utilisation de la méthode open() invoquée telle quelle). Voici un exemple :

with open('files/SerieTV.txt', 'r') as f1:
    for ligne in f1:
        print(ligne)
Game of Thrones

Breaking Bad

The Walking Dead

Dexter

7Affiche Friends

Friends

House of Cards

Lost, les disparus

Vous remarquez que with introduit un bloc d’indentation. C’est à l’intérieur de ce bloc que nous effectuons toutes les opérations sur le fichier. Une fois sorti, Python fermera automatiquement le fichier. Vous n’avez donc plus besoin d’invoquer la fonction close().