Loading...
Python

Fichiers

Appuyer → pour continuer.

- ← et → pour avancer / reculer.
- espace pour avancer.
- Ctrl/Command et + or - pour zoomer plus ou moins.
- N pour afficher / cacher les notes.
- H pour afficher l'aide.

Notes for second slide
Ouverture

- Ouverture d'un fichier : obFichier = open(cheminFichier, modeOuverture), renvoie un objet-fichier à manipuler

- cheminFichier : Chemin absolu ou relatif
- modeOuverture :

- "r" lecture : le fichier doit exister, et la tête de lecture est en début de fichier
- "w" écriture : crée ou écrase le fichier, et commence à écrire au début du fichier
- "a" ajout : crée ou ouvre le fichier, et commence à écrire en fin de fichier

Fermeture

- Méthode : obFichier.close()
- Assure la cohérence du fichier

Ecriture

- Ouverture du fichier en écriture ou ajout
- Méthode : obFichier.write(texte)
- Ecrit texte dans le fichier (format : chaine de caractères)

Lecture

- Ouverture du fichier en lecture
- Méthode : obFichier.read()
- Lit les données présentes dans le fichier
- Renvoie une chaîne de caractère, contenant la totalité du fichier

Lecture

- Ouverture du fichier en lecture
- Méthode : obFichier.read(taille)
- Lit les données présentes dans le fichier
- Renvoie une chaîne de caractère, contenant les tailles caractères suivant à lire
- S'il n'y a pas assez de caractères dans le fichier, la lecture s'arrête à la fin du fichier
- Si la fin de fichier est atteinte : renvoie une chaîne vide

Exemple - Ecriture
obFichier = open('MonFichier','a')
obFichier.write('Bonjour, fichier !')
obFichier.write("Quel beau temps, aujourd'hui !")
obFichier.close()
› cat MonFichier
Bonjour, fichier !Quel beau temps, aujourd'hui !
Exemple - Lecture
obFichier = open('MonFichier', 'r')
t = obFichier.read()
print t
obFichier.close()
Bonjour, fichier !Quel beau temps, aujourd'hui !
Exemple - Lecture
››› ofi = open('MonFichier','r')
››› t = ofi.read(7)
››› print t
'Bonjour'
››› t = ofi.read(5)
››› print t
', fic'
››› t = ofi.read(1000)
››› print t
"hier !Quel beau temps, aujourd'hui !"
››› t = ofi.read()
››› print t
''
››› ofi.close()
Présentation

- C'est un fichier séquentiel qui contient des caractères imprimables
- Organisés en en ligne successives, séparées par un caractère non imprimable appelé "marqueur de fin de ligne"

››› f = open('FichierTexte', 'w')
››› f.write('Ceci est la ligne un \nVoici la ligne deux\n')
››› f.write('Voici la ligne trois \nVoici la ligne quatre\n')
››› f.close()

- Notez bien le marqueur de fin de ligne "\n" qui permet de séparer ligne par ligne

Lecture - readline()

- Opérateur readline() extrait une ligne du fichier
- Lit une ligne à la fois, en incluant le caractère de fin de ligne

››› f = open("FichierTexte","r")
››› ligne = f.readline()
››› print ligne
Ceci est la ligne un
››› ligne = f.readline()
››› print ligne
Voici la ligne deux
Lecture - readlines()

- La méthode readlines() transfère toutes les lignes (restantes) dans une liste de chaînes

››› lignes = f.readlines()
››› print lignes
['Voici la ligne 3 \n','Voici la ligne quatre \n']
Lecture - Remarques

- La liste retournée par readlines() apparaît en format brut, avec des apostrophes pour séparer les chaînes et les caractères spéciaux sous forme de codes
- readlines() permet de lire un fichier dans son intégralité : ATTENTION pour les fichiers de grandes tailles, la mémoire vive de l'ordinateur peut ne pas supporter une telle quantitée de données à traiter
- Dans le cas de la fin du fichier, readline() renvoie une chaîne vide, alors que readlines() renvoie une liste vide

Fonctionnement général

- L'argument de write() doit être une chaîne de caractères
- Si on veut enregistrer un nombre, on doit d'abord le traduire en chaîne : str(n)
- Problème : la lecture des données pour retranscrire correctement les données n'est pas assurée

Exemple
››› a = 5
››› b = 2.83
››› c = 67
››› f = open('Monfichier','w')
››› f.write(str(a))
››› f.write(str(b))
››› f.write(str(c))
››› f.close()
››› f = open('Monfichier','r')
››› print f.read()
52.8367
››› f.close()

- On a enregistré 3 valeurs numériques, comment les distinguer dans la chaîne lue ?

Module `pickle`

- Pickle signifie "conserver"
- Enregistre les données en conservant leur type
- Utilisation du module : import pickle
- Ajout : pickle.dump(variable, fichier)
- Récupération : variable = pickle.load(fichier)

Exemple - Pickle
››› import pickle
››› a = 5
››› b = 2.83
››› c = 67
››› f = open('Monfichier','w')
››› pickle.dump(a, f)
››› pickle.dump(b, f)
››› pickle.dump(c, f)
››› f.close()
››› f = open('Monfichier','r')
››› t = pickle.load(f)
››› print t, type(t)
5 ‹type 'int'›
››› t = pickle.load(f)
››› print t, type(t)
2.83 ‹type 'float'›
››› t = pickle.load(f)
››› print t, type(t)
67 ‹type 'int'›
››› f.close()
Pickle - Liste de variables

- Transforme une liste en chaine, et vice-versa
- Liste vers Chaîne : ch1 = pickle.dumps(liste)
- Chaîne vers Liste : liste = pickle.loads(ch1)

››› ch1 = pickle.dumps([1, 2, 3])
››› print ch1
'(lp0\nI1\naI2\naI3\na.'
››› L = pickle.loads(ch1)
››› print L
[1, 2, 3]
Module `struct`

- Une structure permet de stocker plusieurs données ensemble, peu importe le type des données
- Module `struct` permet d' "empaquetter" ou de "déparquetter" la structure en fonction d'un format donné.
- Utilisation du module : import struct
- Empaquetter : varString = struct.pack(format, a [, b ...])
- Déparquetter : var = struct.unpack(format, varString)
- Connaitre la taille de ce qui sera stocké : taille = struct.calcsize(format)

Formats

Code | Type
c | caractère
B | caractère non signé (octet)
i | entier (4 octets)
I | entier non signé (4 octets)
f | flotant (4 octets)
d | double (8 octets)

Liste complète des formats
format = 'ifid' # Contiendra : int, float, int, double
Exemple - Struct
››› import struct
››› L = [3.14, 42.125, 121, 'A']
››› fmt = 'fdic'
››› data = struct.pack(fmt, L[0], L[1], L[2], L[3])
››› print data # Affiche la valeur en binaire
%Gï¿½ï¿½%@H@E@yA
››› data # Chaine associée
'\xc3\xf5H@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10E@y\x00\x00\x00A'
››› f = open('Monfichier',"w")
››› f.write(data)
››› f.close()
››› f = open('Monfichier','r')
››› dim = struct.calcsize(fmt)
››› donnee = struct.unpack(fmt,f.read(dim))
››› print donnee
(3.140000104904175, 42.125, 121, 'A')
››› f.close()
Présentation

- Stock les données en binaire plutôt qu'en texte
- Ouverture en écriture : f = open('chemin', "wb")
- Ouverture en ajout : f = open('chemin', "ab")
- Ouverture en lecture : f = open('chemin', "rb")
- Fermeture : f.close()

Présentation

- Ecriture : f.write(donneeBinaire)
- Lecture : donneeBinaire = f.read(taille)
- Convertir les données en binaire : `pickle, struct`

Exemple - Struct
# Importe le module
import struct
# Variables : un entier, un réel et une chaine
i = 10
x = 3.1415692
s = "ABCD"
# Ecriture dans le fichier
f = open("info.bin","wb")
f.write( struct.pack('i',i))
f.write( struct.pack('d',x))
f.write( struct.pack('cccc',*s))
f.close()
# Lecture depuis le fichier
f = open("info.bin","rb")
j = struct.unpack('i', f.read(4))
y = struct.unpack('d', f.read(8))
t = struct.unpack('cccc', f.read(4))
f.close()
# Affichage des données lues
print j, y, t # (10,) (3.1415692,) ('A', 'B', 'C', 'D')
Exemple - Pickle
# Importe le module
import pickle
# Variables : un dictionnaire et une liste
dico = {'a':[1, 2.0, 3, "e"], 'b':('string',2), 'c': None}
liste = [1, 2, 3]
# Ecriture dans le fichier
f = open("data.bin","wb")
pickle.dump(dico, f)
pickle.dump(liste, f)
f.close()
# Lecture depuis le fichier
f = open("data.bin","rb")
d = pickle.load(f)
l = pickle.load(f)
f.close()
# Affichage des données lues
print d # {'a': [1, 2.0, 3, 'e'], 'c': None, 'b': ('string', 2)}
print l # [1, 2, 3]
Et si on ne connait pas la fin d'un fichier ? (1/2)
# Importe le module
import pickle
# Variable
data = {12:'douze', 'liste':list('toto'), 1.23: 4+5j, (1, 2, 3):'koko'}
# Ecriture dans le fichier
f = open("toto.txt","wb")
pickle.dump(data, f)
pickle.dump('une chaine', f)
pickle.dump(range(10), f)
pickle.dump(20, f)
pickle.dump(30, f)
f.close()
Et si on ne connait pas la fin d'un fichier ? (2/2)
# Lecture depuis le fichier
f = open("toto.txt","rb")
try :
while True :
a = pickle.load(f)
print a
except EOFError : # Si on atteind la fin du fichier, une erreur est levée, et on la récupère
print ('Fin du fichier atteinte')
f.close()
# Affichage obtenu
{'liste': ['t', 'o', 't', 'o'], 1.23: (4+5j), 12: 'douze', (1, 2, 3): 'koko'}
une chaine
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
20
30
Fin du fichier atteinte
Module os

- Méthodes de traitement des fichiers

- rename(nomActuelFichier, nouveauNomFichier)
- remove(nomFichierASupprimer)

- Méthodes de répertoire

- mkdir(nouveauRepertoire)
- rmdir(nomRepertoireASupprimer)
- getcwd() : Affiche le répertoire courrant
- listdir(nomRepertoire) : Liste les fichiers d'un répertoire