Vous êtes sur la page 1sur 30

Langage de Programmation Evolué - BI

L3 BI-EBUS

Chapitre 4: Les fichiers en Python

Haïfa Nakouri

hayfa.nakouri@esen.tn

ESEN Manouba

2021/2022
Objectifs du chapitre

 Les objectifs d’apprentissage de ce chapitre sont les


suivants :
 Ouvrir un fichier, lire des données à partir d’un fichier et
écrire des données dans un fichier
 Développer des applications avec des fichiers

Haïfa Nakouri LPE-BI ESEN 2021/2022 2


Motivation

 Les données stockées dans le programme sont temporaires;


Elles sont perdues lorsque le programme prend fin. Pour
stocker de manière permanente les données créées dans un
programme, vous devez les enregistrer dans un fichier sur
un disque ou un autre support de stockage permanent.

 Il existe plusieurs types de fichiers : texte, CSV, binaire,


JSON, XML, XLS... Les fichiers texte sont essentiellement
des chaînes sur le disque.

 Un fichier est une séquence de caractères stockés sur un


lecteur de disque.
 Les fichiers ont un nom et une extension de fichier.

Haïfa Nakouri LPE-BI ESEN 2021/2022 3


Ouvrir et fermer un fichier
• Un fichier doit être ouvert avant qu’un programme puisse lire/écrire des
données à partir de celui-ci,
• Utiliser la function open() pour créer et ouvrir un fichier :
MonFichier = open(“Nomfichier”, ”Mode d’accès”)
- Exemple: UnFichier = open( “data.dat”, “r” )
- Ouvre le fichier spécififé en mode lecture, et retourne un objet de
type File.  UnFichier est un objet, instance de la classe File
• Nomfichier peut être :
• Le nom du fichier avec son extension : <NomFichier.ext>
• Le chemin d’accès complet au fichier en incluant le nom du fichier et
son extension :
- Example: UnFichier = open( “c:/Documents/exams/test1.txt”, “r” )
• Quand le programe finit sont exécution le fichier doit être fermé en
utilisant la function close().
- Exemple: UnFichier.close()

Haïfa Nakouri LPE-BI ESEN 2021/2022 4


Ouvrir un fichier – Modes d’accès
 Les modes d’accès à un fichier :
Access mode Action
r Lisez le fichier. si le fichier n’existe pas, une erreur est
déclenchée. Si « + » est ajouté (r+), il permet d’ouvrir
un fichier pour la lecture et l’écriture.
w Écrivez dans le fichier. Si le fichier existe, le contenu
est écrasé. Si le fichier n’existe pas, il sera créé. Si
« + » est ajouté (w+) permet également de lire à partir
du fichier.
a Ajoutez au contenu du fichier existant. Si le fichier
existe, de nouvelles données sont ajoutées à la fin du
fichier. Si le fichier n’existe pas, il sera créé.
« a+ » est identique à « a » mais aussi ouvert à la
lecture.
B Ouvre un fichier binaire
Haïfa Nakouri LPE-BI ESEN 2021/2022 5
Lire à partir d’un fichier texte
 Après avoir ouvert un fichier en mode lecture
(f = open(“monFichier.txt”, ”r”)), on peut utiliser :
 La méthode read() qui retourne la totalité du contenu du fichier dans la
variable spécifiée :
variable=objetFichier.read()
Exemple: data = f.read()
 read(n) : retourne aussi les octets lus sous forme de chaîne de caractères. Lit
n octets/characters. Si l’argument n n’est pas passé, la fonction lit la totalité du
fichier.
variable=objetFichier.read(n)
Exemple: data=f.read(5)
 Tous les fichiers ont un indicateur de fin de fichier EOF (end of file) qui signale
au progamme qu’il n’y a plus de données à lire.
 Python se souvient de la position de la dernière donnée lue en grâce à un
pointeur de fichier/marque fichier (bookmark)
Haïfa Nakouri LPE-BI ESEN 2021/2022 6
Exemple avec read()
file2=open("Testfile.txt","r") • seek(n) fonction utilisée pour déplacer le
print (file2.read())
descripteur du fichier (marqueur) du fichier
Hello Guys à une position donnée.
How are you?
• Le descripteur du fichier se comporte
comme un curseur, qui définit la position à
file2.seek(0) partir de laquelle la lecture ou l’écriture
print (file2.read(5)) dans un fichier doit commencer
Hello • La fonction met en place le descripteur du
fichier à l’(nième+1) octet depuis le début
du fichier.
print (file2.read(10))
Guys
How

file2.seek(0)

print (file2.read(10))
Hello Guys

Haïfa Nakouri LPE-BI ESEN 2021/2022 7


Lire à partir d’un fichier texte
 readline(n) : Si n est spécifié (argument optionnel), la fonction lit
au plus n octets/characters. En revanche, la fonction lit au plus une
ligne même si n dépasse la taille de la ligne.

ObjetFichier.readline(n)

 Lecture de caractères à partir d’une ligne :


 Les fichiers texte sont souvent orientés ligne et votre programme
peut avoir à lire et à traiter une ligne à la fois
 La méthode readline() est utilisée pour lire uniquement les
caractères de la ligne courante
 Exemples
varStr = MonFichier.readline(1)
varStr = MonFichier.readline(5)
varStr = MonFichier.readline()

Haïfa Nakouri LPE-BI ESEN 2021/2022 8


Exemple avec readline()
(file2.readline())
Hello Guys

(file2.readline())
How are you ?

(file2.seek(0))
(file2.readline(5))
Hello
(file2.seek(0))
(file2.readline(20))
Hello Guys

(file2.seek(0))
(file2.readline(15))
Hello Guys

Haïfa Nakouri LPE-BI ESEN 2021/2022 9


Lire à partir d’un fichier texte
 Lire toutes les lignes d’un fichier et les retourner dans une liste :

 Une autre façon de travailler avec les lignes d’un fichier consiste à lire
chaque ligne (chaîne) dans une liste

 La méthode readlines() est utilisée pour lire toutes les lignes d’un fichier
texte et les stocker dans une liste de lignes (chaînes). Example :
uneListe = f2.readlines()
print (f2.readlines())
['Hello Guys \n', 'How are you? \n']

 Parcourir un fichier texte


 Les fichiers texte sont des types des séquences délimitées par des lignes

 Les programmes Python peuvent également lire et traiter des lignes à partir
de fichiers texte à l’aide d’une instruction itérative. Exemple :

for line in f2:


print(line)

Haïfa Nakouri LPE-BI ESEN 2021/2022 10


Ecrire dans un fichier texte
 Après l’ouverture d’un fichier texte en mode écriture, on peut utiliser la

fonction write() pour écrire une seule chaîne de caractères dans le

fichier :

myFile = open("GuestList.txt","w")
myFile.write("Hi there!")
myFile.write("How are you?")
myFile.close()

• Quand on n’a plus besoin du fichier, on le ferme (close ()).

Haïfa Nakouri LPE-BI ESEN 2021/2022 11


Ecrire une ligne dans un fichier texte

 Similaire à la fonction print()


 Indiquer un ‘\n’ (newline) à la fin de chaque chaîne garantit d’avoir
chaque chaîne écrite dans une ligne à part :

myFile = open("GuestList.txt","w")
myFile.write("Hi there!\n")
myFile.write("How are you?")
myFile.close()

Haïfa Nakouri LPE-BI ESEN 2021/2022 12


Ecrire une liste de chaînes dans un fichier
texte
 Ecrire une liste de chaînes des caractères dans un fichier
 La fonction writelines() est la function complémentaire à readlines()
 Prend comme argument une liste d’éléments (chaînes de caractères)
qu’elle écrit dans un fichier :
ObjetFichier.writelines(List)

 Exemple
L = [‘hello guys\n’,‘how are you?’]
ObjetFichier.writelines(L)

 Le caractère ‘\n’ (newline) doit être embarqué à la fin de chaque


chaîne de la liste pour formatter chaque chaîne dans une ligne à part
(si besoin)

Haïfa Nakouri LPE-BI ESEN 2021/2022 13


Exemple

print("Ouvrir le fichier")
target = open("C:/Users/User1/Desktop/filename.txt", 'w')
print("Saisir des lignes : ")
line1 = ‘good morning’
line2 = ‘how are you?’
print("Ecriture des lignes dans le fichier")
target.write(line1)
target.write("\n")
target.write(line2)
target.write("\n")
target.writelines([line1,line2])
print("Fermer le fichier.")
target.close()

Haïfa Nakouri LPE-BI ESEN 2021/2022 14


Ajouter du contenu à un fichier texte

 Si on veut écrire à la fin du fichier (extension), on utilise le mode


« a » (append) pour ouvrir le fichier en mode « extension »
 Example:

fruits = ["Orange\n", "Banana\n", "Apple\n"]


f=open(" C:/Users/User1/Desktop/filename.txt",mode="a+")
f.writelines(fruits)
#Positionne le marqueur au début du fichier
f.seek(0)
for line in f:
print(line) Output :
good morning
f.close()
how are you?
good morninghow are you?Orange
Banana
Apple

Haïfa Nakouri LPE-BI ESEN 2021/2022 15


Autre alternative pour ouvrir un fichier

• name: retourne le nom du fichier


• closed: retourne True si le fichier est fermé, Faux sinon.
• mode: retoune le mode selon lequel le fichier est accédé.

Exemple:

with open("C:/Users/User1/Desktop/filename.txt") as file:


print("Name of the file:",file.name)
print("Mode of the file:",file.mode)

print("Closed?",file.closed)

En Python, le mot clé with est utilisé quand on travaille avec des
sources ingérables (comme les fichiers stream).

Haïfa Nakouri LPE-BI ESEN 2021/2022 16


Autres fonctions …

 readable() : Retourne True si on a le droit de lire le fichier,


False sinon

 writable() : Retourne True si on a le droit d’ecrire sur le fichier,


False sinon

 seek() : Met en place le curseur au début du fichier

 truncate([size]) : tronque le fichier, jusqu’au nombre d’octets (bytes)


spécifié

Haïfa Nakouri LPE-BI ESEN 2021/2022 17


Exemple

with open("C:/Users/User1/Desktop/filename.txt", "w+") as f:


f.write("We are learning python\nWe are learning python")
f.seek(0)
print(f.read())
print("Is readable:", f.readable())
print("Is writeable:", f.writable())
f.truncate(5)
f.seek(0)
print(f.read())

Haïfa Nakouri LPE-BI ESEN 2021/2022 18


Exercice : Nombre d’occurrences d’une lettre
dans fichier

Écrire un programme qui invite l’utilisateur à entrer un


fichier et compte le nombre d’occurrences de chaque lettre
dans le fichier, quel que soit le cas.

Haïfa Nakouri LPE-BI ESEN 2021/2022 19


Exercice - Solution

def main():
f=open("C:/Users/acer/PycharmProjects/TestFile.txt","r+")
d={}
for line in f:
for letter in line.lower():
if letter in d:
d[letter]+=1
else:
d[letter]=1
f.close
print(d)
main()

Haïfa Nakouri LPE-BI ESEN 2021/2022 20


Fichier CSV
 Un fichier CSV (comma separated values) permet d’enregistrer les
données dans une structure tabulaire avec une extension ‘.csv’.
 Les fichiers CSV ont été largement utilisés dans les applications de
commerce électronique car ils sont considérés comme très faciles
à traiter.
 Le format CSV est le format d’importation et d’exportation le plus
couramment utilisé pour les bases de données et les feuilles de
calcul.
 Les fichiers CSV s’ouvriront dans Excel et presque toutes les
bases de données qui disposent d’un outil permettant l’importation
à partir d’un fichier CSV.
 Le format standard est défini par des données de lignes et de
colonnes. Chaque ligne est terminée par un « retour en ligne »
pour commencer la ligne suivante. Dans chaque ligne, chaque
colonne est séparée par un symbole de séparateur - une virgule (,),
un point-virgule (;) ou un autre symbole.

Haïfa Nakouri LPE-BI ESEN 2021/2022 21


Fichier CSV - Exemple

 Exemple d’une table de données:


Programming Designed by Appeared Extension
language
Python Guido van Rossum 1991 .py
Java James Gosling 1995 .java
C++ Bjarne Stroustrup 1983 .cpp

 Cette table peut être représentée en format csv comme suit :


Exemple de données csv:
Programming language, Designed by, Appeared, Extension
Python, Guido van Rossum, 1991, .py
Java, James Gosling, 1995, .java
C++, Bjarne Stroustrup,1983,.cpp
 chaque tuple est une nouvelle ligne et chaque colonne est
séparée par une virgule.
Haïfa Nakouri LPE-BI ESEN 2021/2022 22
Module CSV

 Python fournit un module CSV pour gérer les fichiers


CSV. Pour lire/écrire des données, il faut parcourir en
boucle les lignes du fichier CSV.
 import csv
 Le module CSV dispose de plusieurs fonctions et
classes disponibles pour la lecture et l’écriture de
CSV, et ils incluent :
 La fonction csv.reader
 La fonction csv.writer
 La fonction csv.dictwriter
 La fonction csv.dictreader

Haïfa Nakouri LPE-BI ESEN 2021/2022 23


Lire à partir d’un fichier CSV

 La lecture à partir d’un fichier CSV se fait à l’aide de l’objet reader

 Le fichier CSV est ouvert avec la fonction open() intégrée, qui renvoie
un objet fichier

 Ceci est ensuite transmis à l’objet reader

Exemple 1: Lire CSV ayant comme délimiteur une virgule


 On considère un fichier csv nommé people.csv dans le répertoire actif
avec les entrées suivantes :
Name,Age,Profession
Jack,23,Doctor
Miller,22,Engineer

Haïfa Nakouri LPE-BI ESEN 2021/2022 24


Lire à partir d’un fichier CSV
 On considère le code suivant :

import csv
with open(‘people.csv', 'r') as file:
my_reader = csv.reader(file)
for row in my_reader:
print(row) ['Name', 'Age', 'Profession']
file.close() ['Jack', '23', 'Doctor']
['Miller', '22', 'Engineer']

 Chaque ligne renvoyée par le lecteur est une liste d’éléments String
contenant les données trouvées en supprimant le délimiteur

 La première ligne renvoyée contient les noms des colonnes, qui


sont traités d’une manière spéciale
Haïfa Nakouri LPE-BI ESEN 2021/2022 25
Lire à partir d’un fichier CSV

Example2: Lire un fichier CSV et le retourner dans un dictionnaire avec la


focntion csv.DictReader()
 On considère me même fichier csv people.csv donné en Exemple 1 :
import csv Name,Age,Profession
with open(‘people.csv', 'r') as Jack,23,Doctor
file: Miller,22,Engineer
reader = csv.DictReader(file)
for row in reader:
print(dict(row))
file.close()

{'Name': 'Jack', ' Age': ' 23', ' Profession': ' Doctor'} {'Name': 'Miller', ' Age': ' 22', ' Profession': ' Engineer'}

 csv.DictReader() retourne un objet de type OrderedDict pour chaque tuple. C’est


pourquoi nous avons utilisé dict() pour convertir chaque ligne en dictionnaire

Note: À partir de Python 3.8, csv. DictReader() renvoie un dictionnaire pour chaque
ligne, et nous n’avons pas besoin d’utiliser dict() explicitement
Haïfa Nakouri LPE-BI ESEN 2021/2022 26
Ecrire dans un fichier CSV
 Tout d’abord, nous importons le module csv et nous ouvrons notre fichier
csv en mode écriture.
 La fonction csv.writer() permet de créer un objet adapté à l’écriture : un
objet writer.
 La fonction writerow() est utilisée pour écrire une seule ligne dans le fichier
CSV.
 Pour itérer les données sur les lignes, nous devrons utiliser la fonction
writerows().
import csv
myData=[[‘first_name’,’second_name’, ‘Grade’],[‘Med’,’Ali’,’A’],[‘Ahmed’, ‘Anas’,’B’]]
With open('example1.csv', 'w‘, newline=‘’) as myFile:
#create the writer object containing csv module and the writer function
writer = csv.writer(myFile)
#writerows can get a list and the items in the list will be converted to columns in
csv file
writer.writerows(myData)
myFile.close()
print("Writing complete")

Haïfa Nakouri LPE-BI ESEN 2021/2022 27


Exemple
Exemple 1: Ecrire dans un fichier csv avec writerow()
import csv
with open('example2.csv', 'w‘,newline=‘’) as myFile:
writer = csv.writer(myFile)
writer.writerow([“SN", "Name", "Contribution"])
writer.writerow([1, "Linus Torvalds", "Linux Kernel"])
writer.writerow([2, "Tim Berners-Lee", "World Wide Web"])
writer.writerow([3, "Guido van Rossum", "Python Programming"])
myFile.close()
print("Writing complete")

Exemple 2: Ecrire dans un fichier csv avec writerows() en spécifiant le délimiteur :


import csv
row_file = [["SN", "Name", "Contribution"],
[1, "Linus Torvalds", "Linux Kernel"],
[2, "Tim Berners-Lee", "World Wide Web"],
[3, "Guido van Rossum", "Python Programming"]]
with open('example2.csv', 'w‘,newline=‘’) as myFile:
writer = csv.writer(myFile, delimiter='|')
writer.writerows(row_file)
myFile.close()
print("Writing complete")

Haïfa Nakouri LPE-BI ESEN 2021/2022 28


Ecrire dans un fichier CSV

 Objets de csv. La classe DictWriter() peut être utilisée pour écrire dans un
fichier CSV à partir d’un dictionnaire Python.
 Syntaxe de la classe csv.DictWriter() : csv.DictWriter(Fichier, NomsChamps).
 Fichier : le fichier CSV dans lequel on souhaite écrire
 NomsChamps : une liste contenant les en-têtes des colonnes en
spécifiant l’ordre dans lequel les données devraient être écrites dans le
fichier csv
import csv
with open('example3.csv', 'w‘, newline=‘’) as myFile:
fieldnames=[‘first_name’,’second_name’,’grade’]
writer = csv.DictWriter(myFile,fieldnames=fieldnames)
writer.writeheader()
writer.writerow({‘first_name’:’Med’,’seconf_name’:’Ali’,’grade’:’A’})

myFile.close()
print("Writing complete")

Haïfa Nakouri LPE-BI ESEN 2021/2022 29


Exemple

import csv
with open('players.csv', 'w', newline='') as myFile:
fieldnames=['player_name','fide_rating']
writer = csv.DictWriter(myFile,fieldnames=fieldnames)
writer.writeheader()
writer.writerow({'player_name': 'Magnus Carlsen', 'fide_rating': 2870})
writer.writerow({'player_name': 'Fabiano Caruana', 'fide_rating': 2822})
writer.writerow({'player_name': 'Ding Liren', 'fide_rating': 2801})
myFile.close()

Haïfa Nakouri LPE-BI ESEN 2021/2022 30

Vous aimerez peut-être aussi