0% ont trouvé ce document utile (0 vote)
2 vues16 pages

Comprendre les fichiers en Python

Le document traite des fichiers en Python, expliquant leur définition, types, et méthodes d'accès aux données. Il couvre les opérations de lecture et d'écriture sur des fichiers texte et binaires, ainsi que des techniques pour gérer les données numériques. Enfin, il aborde l'utilisation du module pickle pour le traitement de fichiers binaires.

Transféré par

Dd1429
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
2 vues16 pages

Comprendre les fichiers en Python

Le document traite des fichiers en Python, expliquant leur définition, types, et méthodes d'accès aux données. Il couvre les opérations de lecture et d'écriture sur des fichiers texte et binaires, ainsi que des techniques pour gérer les données numériques. Enfin, il aborde l'utilisation du module pickle pour le traitement de fichiers binaires.

Transféré par

Dd1429
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

LES FICHIERS EN PYTHON

1
Notion de Fichier - collection d’informations stockées sur une mémoire de
masse (non volatile, capacité plus importante que la mémoire vive)

Types de fichiers – Ils se distinguent par…


1. Organisation des données : structuré, les informations sont
organisées d’une manière particulière qu’il faut respecter (ex.
fichiers d’enregistrements) ; non-structuré, les informations sont
alignées à la suite (ex. fichier texte)
2. Mode d’accès aux données : accès indicé, utilisable comme un
tableau ; accès séquentiel, lecture ou écriture pas à pas
(ex. ligne par ligne dans un fichier texte)

La catégorisation n’est pas toujours très tranchée, un fichier XML par ex.
est un fichier texte (manipulable avec un éditeur de texte) mais qui obéit
à une organisation structurée

2
Accès séquentiel, non structuré

FICHIER TEXTE

3
Lecture en bloc avec read() megane
clio
# -*- coding: utf -*- Fichier texte à lire : twingo
safrane
#ouverture en lecture « [Link] » laguna
f = open("[Link]","r") vel satis

#lecture •open() permet d’ouvrir un fichier, en lecture ici


s = [Link]() avec l’option « r ». La fonction renvoie un objet de
type fichier stocké dans f
#affichage
print("** contenu de s **") • le curseur de fichier est placé sur la première ligne
print(s) • read() lit tout le contenu du fichier d’un bloc
print("** fin contenu **") • close() ferme le fichier (et donc le déverrouille)

#information sur s
print("type de s : ",type(s))
print("longueur de s : ", len(s))

#fermeture
[Link]()

s est detype«str », onserendmieuxcompteenmodeconsole:

\n représente le caractère spécial « saut de ligne » (line feed),


c’est
R.R. pour cela
– Université Lyon que
2 print(s) fonctionne correctement. 4
Lecture en bloc avec readlines (avec « s »)
# -*- coding: utf -*-

#ouverture en lecture
f = open("[Link]","r")

#lecture
lst = [Link]()
Le contenu du fichier est
#affichage stocké dans une liste, une ligne
print("** contenu de lst **")
print(lst) = un élément. Le caractère \n
print("** fin contenu **") est maintenu. Il n’est pas
#information sur lst présent sur la dernière ligne de
print("type de s : ",type(lst)) notre fichier exemple.
print("longueur de s : ", len(lst))

#fermeture
[Link]()

5
Remarque : saut de ligne ou pas sur la dernière ligne du fichier

Question : Comment savoir s’il y a un saut de ligne


Ouvrir le fichier dans Notepad++ ou pas à la dernière ligne de notre fichier texte ?

La ligne n°6 est la dernière ligne du fichier,


pas de saut ligne après « vel satis »

Il y a une ligne vide (la n°7) après « vel satis »

6
Lecture ligne par ligne avec readline (sans « s »)
# -*- coding: utf -*-

#ouverture en lecture
• readline() lit la ligne courante et
f = open("[Link]","r") place le curseur sur la ligne suivante.
#lecture ligne itérativement
•la fonction renvoie la chaîne vide
while True: lorsque nous arrivons à la fin du
s = [Link]()
if (s != ""): fichier (Remarque : s’il y a une ligne
print(s) blanche entre 2 véhicules, readline()
else:
break; renvoie le caractère « \n », ce n’est
pas une chaîne vide).
#fermeture
[Link]()

Il y a une ligne vide entre chaque véhicule parce que


le caractère « \n » est toujours là, print() le prend en
compte [ Remarque : pour que print() n’en tienne pas
compte, il faudrait faire print(s,end="") ]

7
Lecture ligne par ligne en itérant sur l’objet fichier

# -*- coding: utf -*- C’est la forme la plus efficace – et la plus


concise – pour une lecture ligne à ligne.
#ouverture en lecture
f = open("[Link]","r") Le caractère \n est présent toujours,
noter la longueur de la chaîne (+1 pour
#lecture ligne itérativement
for s in f: toutes sauf la dernière)
print(s,len(s))

#fermeture
[Link]()

8
Ecriture d’un fichier texte avec write()
# -*- coding: utf -*-
•open() permet d’ouvrir un fichier en écriture avec
l’option « w ». La fonction renvoie un objet de type
#ouverture en écriture fichier référencée par f
f = open("[Link]","w")
• avec « w », le fichier est écrasé s’il existe déjà
#écriture • write() permet d’écrire la chaîne de caractères
[Link]("honda")
[Link]("yamaha")
[Link]("ducati")

#fermeture
[Link]() Il manque les sauts de ligne pour distinguer chaque moto

# -*- coding: utf -*-

#ouverture en écriture Nous insérons le caractère saut de ligne « \n »


f = open("[Link]","w")
après chaque moto, sauf la dernière
#écriture
[Link]("honda\n")
[Link]("yamaha\n")
[Link]("ducati")

#fermeture
[Link]()

9
Ecriture d’un fichier texte avec writelines()

writelines() permet d’écrire


directement le contenu d’une liste.
Nous devons quand même insérer le
# -*- coding: utf -*- caractère « \n » pour que le saut de
#ouverture en écriture ligne soit effectif dans le fichier.
f = open("[Link]","w")

#liste
lst = ["honda\n","yamaha\n","ducati"]

#écriture
[Link](lst)

#fermeture
[Link]()

10
Ajout dans un fichier texte

• open() avec l’option « a » permet d’ouvrir


un fichier en mode ajout
• write() permet d’écrire la chaîne de
# -*- coding: utf -*- caractères

#ouverture en ajout
• attention toujours au saut de ligne
f = open("[Link]","a") • une ouverture en mode lecture / écriture
est possible avec l’option « r+ » mais se
#ajouter un saut de ligne
positionner sur telle ou telle ligne pour y
[Link]("\n")
modifier ou insérer des informations est
#écriture compliqué.
[Link]("laverda")

#fermeture
[Link]()

11
Ajout dans un fichier texte des valeurs numériques

• L’argument de la méthode write() utilisée avec

# -*- coding: utf -*-


un fichier texte doit être une chaîne de
caractères.
a = 5
b = 2.83 • Nous ne pouvons donc enregistrer d’autres
c = 67 types de valeurs qu’en les transformant d’abord
f = open('Monfichier', 'w')
[Link](str(a)) en chaînes de caractères (string).
[Link](str(b))
• Nous pouvons réaliser cela à l’aide de la
[Link](str(c))
[Link]() fonction intégrée str() :
f = open('Monfichier', 'r')
print([Link]())
52.8367
[Link]()

12
Ajout dans un fichier texte des valeurs numériques

 Nous avons enregistré trois valeurs


numériques. Mais comment pouvons-nous import pickle
les distinguer dans la chaîne de caractères
résultante, lorsque nous effectuons la lecture a,b,c = 27, 12.96, [5, 4.83, « mehdi"]
du fichier ? #Ecriture dans le fichier
f =open('donnees_test', 'wb')
 C’est impossible ! Rien ne nous indique [Link](a, f)
d’ailleurs qu’il y a là trois valeurs plutôt [Link](b, f)
qu’une seule, ou 2, ou 4… [Link](c, f)
[Link]()
Il existe plusieurs solutions à ce de problèmes:
L’une des meilleures consiste à importer #Lecture à partir du fichier
un module Python spécialisé : le module pickle : f = open('donnees_test', 'rb')
j = [Link](f)
k = [Link](f)
Attention : l = [Link](f)
Les fichiers traités à l’aide des fonctions du print(j, type(j))
module pickle ne seront pas des des fichiers print(k, type(k))
texte, mais bien des fichiers binaires. print(l, type(l))
[Link]()

13
Traiter un fichier texte comme un fichier binaire (fichier d’octets)

FICHIER BINAIRE

14
Accès en mode binaire (1/2) [Link]
Python peut traiter un fichier en mode binaire, il peut lire octet par octet, ou megane
clio
par blocs d’octets. Un accès indicé est possible dans ce cas. twingo
L’intérêt n’est pas flagrant pour un fichier texte, mais cette fonctionnalité safrane
ouvre la porte au traitement d’autres types de fichiers (ex. fichier image). laguna
vel satis
#ouverture enlecture
f =open("[Link]","rb")
#lire unoctet • option « rb » pour open() pour lecture et mode
a=[Link](1) binaire
print(a) • read() prend un paramètre : nb. d‘octets à lire
#type dea arraydebytes • decode() permet de transformer le tableau d’octets en
print(type(a)) chaîne de caractères, « utf-8 » est le mode d’encodage
#transformer enchaîne decaractères • après un read(), le curseur de fichier se place sur
s=[Link]("utf-8") l’octet suivant, on peut connaître la position du curseur
print(s) avec tell() [début du fichier = indice 0]
print(type(s))
b pour indiquer
#lire une2nde fois a
qu’il s’agit d’un
=[Link](1)
tableau de bytes
print(a)
#pos. ducurseur
print("position : ",[Link]())
15
Accès en mode binaire (2/2)
[Link]
#positionner le curseur megane
clio
[Link](0,0) twingo
#lire un bloc d'octets safrane
laguna
a = [Link](6) vel satis
print(a)
print("longueur = ",len(a)) •seek() permet de positionner le curseur, le 1er
#aller à l'octet n°5 paramètre est la position, le 2nd est la référence : 0 à
#à partir du début partir du début du fichier, 2 à partir de la fin, 1 à partir
[Link](5,0) de la position courante
a = [Link](1) • noter le seek(-1,2) avec un indice négatif, comme pour
print(a) les listes ou les tuples
#lire le dernier octet
[Link](-1,2)
a = [Link](1)
print(a)
#fermeture
[Link]()

16

Vous aimerez peut-être aussi