TP5 : Manipulation de fichiers¶
Le but de ce TP est d’apprendre à lire, créer ou modifier des fichiers.
A) Le module os
¶
Ce paragraphe est donné à titre culturel, éventuellement en vue de votre TIPE. Vous pouvez tester les instructions sur votre ordinateur personnel mais ce paragraphe ne fait pas partie du TP. Il s'agit de manipuler des répertoires dans le système d'exploitation sans utiliser l'explorateur de fichiers; tout est fait en ligne de commande et peut être automatisé dans des programmes.
import os
os.getcwd()
'/home/arnaud/Dropbox/PC/Python/Deodat Info PCSI/2023/TP5'
L’instruction getcwd
indique le répertoire courant de travail (Current Working Directory).
L'exemple est donné pour un système Linux.
Si vous êtes sous Windows vous devriez obtenir quelque chose comme:
'C:\User\arnaud\Dropbox\PC\Python\Deodat Info PCSI\2023\TP5'
Pour changer de répertoire on utilise l'instruction chdir
:
os.chdir('/home/arnaud/Documents')
os.getcwd() # pour vérifier
'/home/arnaud/Documents'
On peut aussi créer un répertoire avec l'instruction mkdir
:
os.mkdir('TPtest')
os.chdir('TPtest') # on va dans un sous-répertoire donc pas besoin de donner le chemin complet
# On aurait pu exécuter os.chdir('/home/arnaud/Documents/TPtest')
os.getcwd() # pour vérifier
'/home/arnaud/Documents/TPtest'
A titre d’info, si l’on veut avancer dans le sous-répertoire dir
du répertoire courant, on peut le noter './dir/'
ou 'dir'
comme précédemment. Si on veut le répertoire dir
situé dans le répertoire frére autre_dir
(c'est-à-dire que le répertoire courant et le répertoire autre_dir
sont situés dans le même répertoire parent) on peut le noter '../autre_dir/dir/'
. Si on veut remonter
deux fois en arrière c'est '../../autre_dir2/autre_dir/dir/'
etc.
Les fonctions principales du module os
:
getcwd()
qui renvoie le répertoire courant de travailchdir(chemin)
qui change de répertoire courantmkdir(rep)
qui crée le répertoirerep
rmdir(rep)
qui supprime le répertoirerep
listdir(chemin)
affiche la liste des fichiers contenus dans le répertoirechemin
(par défaut le répertoire courant)remove(fichier)
supprimefichier
rename(source,dest)
renommesource
endest
os.chdir('../') # retour en arrière dans l'arborescence
os.rmdir('TPtest') # on supprime le répertoire créé
os.chdir('/home/arnaud/Dropbox/PC/Python/Deodat Info PCSI/2023/TP5') # on retourne dans le répertoire de départ
Les fichiers txt
sont des fichiers ne contenant que du texte, sans mise en forme, mais avec
les retours à la ligne et éventuellement des tabulations. Sous Windows ils sont ouverts par
l’application Bloc-notes (Notepad en anglais).
Pour accéder à un fichier txt
en Python on l’ouvre grâce à la fonction open
. En fin
d’utilisation on le ferme grâce à la méthode close
.
Un fichier peut être ouvert en lecture (open avec l’option 'r'
) ou en écriture (open
avec
l’option 'w'
). Cette option permet également de créer un fichier. Il existe d’autres options
comme 'a'
(append) pour l’ajout à la fin du fichier.
Ouverture d’un fichier en écriture.¶
Exécuter la cellule suivante (CTrl+Entrée) :
montxt = open('Test.txt','w')
Comme le fichier n’existait pas il est créé. Pour l’instant l’objet montxt
désigne le contenu
qui sera sauvegardé, on peut le nommer comme on veut.
On replace ce pointeur en début de fichier si l’on ferme puis réouvre le fichier.
# cellule à exécuter
montxt.write("J'écris un texte,\n et il va être sauvegardé.\n")
# Python renvoie le nombre de caractères écrits)
# cellule à exécuter
montxt.write("C'est super !")
# cellule à exécuter
montxt.close()
Ce n’est qu’à l’exécution de la fonction close
que le fichier est physiquement créé (ou
modifié).
Sous Windows on pourrait aller dans la fenêtre de l’explorateur Windows contenant le répertoire de travail
Python et on verrait le fichier Test.txt
. Pour vérifier son contenu on cliquerait deux fois dessus et le bloc-notes devrait s’ouvrir.
Sous Capytale on clique sur l'onglet
Capytale
puisFichiers Annexes
puisDisponibles le temps de l'activité
.
Ne pas oublier la chaîne de caractère
\n
pour le retour à la ligne, ni\t
pour la tabulation. Ces deux chaînes ne comptent que pour un seul caractère.
Ouverture en lecture.¶
Exécuter la cellule ci-dessous:
# Cellule à exécuter
montxt = open('Test.txt','r')
S = montxt.read()
print(S)
montxt.close()
Penser à fermer le fichier pour éviter les conflits.
Un autre moyen courant d’utiliser un fichier est de le traiter ligne par ligne, donc de parcourir les lignes.
# Cellule à exécuter
montxt = open('Test.txt') # L'option 'r' est sélectionnée par défaut
k = 0
for L in montxt :
k = k + 1
print("Ligne", k, ": ", L)
montxt.close()
A RETENIR¶
Ecriture dans un fichier :
montxt = open('fichier.txt', 'w')
...
montxt.write('texte...')
...
montxt.close()
Lecture d’un fichier :
montxt=open('fichier.txt', 'r')
...
S=montxt.read() # ou
L=montxt.readline()
...
montxt.close()
Méthodes principales d’utilisation d’un fichier :
read()
lit le fichier en entier et renvoie une chaîne de caractèresread(n)
litn
caractères et renvoie une chaîne de longueur au plusn
, vide si tout le fichier a été lu.readline()
lit une ligne et renvoie une chaîne de caractère (vide si le fichier est fini)`readlines()
lit toutes les lignes et renvoie la liste de toutes les lignes sous forme de chaînes de caractères.write(S)
écrit la chaîneS
writelines(L)
écrit les lignes de la listeL
close()
enregistre le fichier
Toutes ces méthodes s’appliquent à un objet de type fichier comme montxt
:
L = montxt.readline()
, montxt.write("Hello")
...
Remarque sur les méthodes :¶
Une méthode est une syntaxe particulière aux langages orientés objets. Par exemple :
# Cellule à exécuter
L = [6,8,3,5,6]
sorted(L) # fonction
# Cellule à exécuter
L # L n'a pas été modifiée
# Cellule à exécuter
L = [6,8,3,5,6]
L.sort() # méthode
# Cellule à exécuter
L # L a été modifiée
L’instruction sorted
est une fonction qui a pour paramètre la variable L
.
L’instruction sort()
est une méthode appliquée à l’objet L
.
Les instructions open()
, read()
, open()
, close()
, write()
, readline()
, readlines()
sont à connaître.
A RETENIR :¶
Utilisation d’une méthode : objet.methode()
Méthode avec un argument : objet.methode(arg)
Utilisation d’une fonction avec un argument : fonction(objet)
Avec plusieurs arguments : fonction(objet,arg)
Quelques fonctions et méthodes s’appliquant à une chaîne de caractères S
:
len(S)
longueur deS
S[i]
élément d’indicei
deS
(S[-1]
pour le dernier élément )S[i:j]
sous-chaîne deS[i]
àS[j-1]
(S[:j]
,S[i:]
pour le début, la fin )c in S
teste sic
est dansS
S.split()
renvoie la liste des mots deS
S.upper()
transforme les minuscules en minuscules (S.lower()
,S.capitalize()
existent aussi )
Pour la liste complète : help(str)
. Les méthodes count
, index
, replace
, join
peuvent
être utiles également.
len()
etsplit()
sont à connaître.
Exécuter les cellules suivantes:
# Cellule à exécuter
montxt = open("Test.txt")
Texte = montxt.read()
montxt.close()
# Cellule à exécuter
print(Texte.upper())
# Cellule à exécuter
"super" in Texte
# Cellule à exécuter
Texte.index("super") # indice du premier caractère de "super"
# Cellule à exécuter
Texte.split()
La méthode split
sépare une chaîne de caractères en une liste de chaînes de caractères
selon un caractère particulier. Par défaut le délimiteur est l’espace mais il
est possible d’en spécifier un autre.
# Cellule à exécuter
Ligne = "1;5;6.5;200"
L1 = Ligne.split(";")
L1
# Cellule à exécuter
type(L1) # Quel est le type de L1 ?
# Cellule à exécuter
type(L1[0]) # Quel est le type d'un élément de L1 ?
# Cellule à exécuter
L1[0] + L1[1]
# Cellule à exécuter
Liste = [ float(x) for x in L1 ]
# Cellule à exécuter
Liste
# Cellule à exécuter
Liste[0] + Liste[1]
Lorsqu'on veut faire des calculs à partir de données issues d'un fichier texte il ne faut pas oublier de les convertir de chaîne de caractères vers nombre ( c'est-à-dire de
str
versint
oufloat
)
# Cellule à exécuter
Ligne.split("5")
Exercice 1¶
Q1. Ecrire une fonction Occurrences(a, S)
comptant le nombre d’occurrences d’un caractère a
dans une chaîne S
.
# Cellule à compléter
def Occurences(a, S) :
# Cellule pour tester
Occurences('e', 'sous-espace totalement isotrope')
Q2. Ouvrir le ficher LaFontaine.txt
à l’aide de Python (il est dans le répertoire courant). Stocker son contenu, par exemple
dans la variable Texte
.
Convertir toutes ses majuscules en minuscules et afficher le résultat (il ne faut pas modifier le fichier LaFontaine.txt
et il ne faut pas définir de fonction).
Q3. Compter le nombre d’occurrences de chaque lettre de l’alphabet dans ce texte en minuscules (ne pas définir de fonction).
Pour ceci il peut être utile de noter Alphabet = "azertyuiopqsdfghjklmwxcvbn"
la chaîne de toutes les
lettres de l’alphabet, non obligatoirement classées. Il suffira alors d’écrire :
for x in Alphabet :
print(x, "apparaît", Occurences(x, Texte), "fois.")
# Cellule à compléter
Alphabet = "azertyuiopqsdfghjklmwxcvbn"
Q4. Créer un fichier Compte.csv
contenant $26$ lignes, toutes de la forme "x,k"
où k
est le
nombre d’occurrences de la lettre x
(ne pas définir de fonction).
Attention ! Ces lignes doivent être des chaînes de caractères (et il faut leur ajouter le
retour à la ligne '\n'
).
Pour concaténer des chaînes de caractères, on utilise +
.
Rappel: la fonction convertissant un nombre 5
en chaîne de caractères "5"
est : str(5)
.
On crée un fichier
csv
pour pouvoir le manipuler avec LibreOffice ou Excel. Les colonnes d’un tel fichier sont généralement séparées par des virgules.
# Cellule à compléter
Q5. Sous Capytale cliquer sur l'onglet Capytale
puis Fichiers Annexes
puis Disponibles le temps de l'activité
et ouvrir le fichier Compte.csv
pour voir le nombre d’occurrences de chaque lettre (sous Windows on utiliserait l'explorateur de fichiers).
Trier les lignes pour voir les lettres les plus fréquentes et les
plus rares.
Pour trier des lignes selon les éléments d’une colonne sous LibreOffice ou Excel, sélectionner les lignes en questions (toutes en l’occurrence), menu
Données
cliquer surTri
et sélectionner la colonne selon laquelle le tri est souhaité (on peut aussi utiliser Bloc-Notes).
Quelles sont les deux lettres qui n’apparaissent pas dans cette table ?
# Réponse :
Combien de "e"
apparaissent ?
# Réponse :
Exercice 2 : Tracé de la carte de France¶
On utilise le fichier texte Coordonnees_France.txt
. Comme on peut le constater en
l'ouvrant, ses lignes sont de la forme :
849460.0 6524534.0
848984.9 6525112.0
849022.0 6527350.0
...
Il s’agit des coordonnées des points frontières de la France métropolitaine. Ces coordonnées sont au format Lambert 93, système géodésique officiel depuis 2001.
Q6. Donner des instructions qui permettent de compter le nombre de lignes de ce fichier
# Cellule à compléter
Q7. Stocker les données contenues dans le fichier Coordonnees_France.txt
dans deux
listes X
et Y
de flottants, une pour la première colonne et l’autre pour la seconde.
Utiliser la méthode split()
pour découper et la fonction float
pour convertir en
flottant.
A = "9.6"
float(A)
9.6
# Cellule à compléter
Q8. La cellule suivante affiche le graphique reliant les points dont les coordonnées ont été stockées dans les
listes X
et Y
. Ce graphique est tracé en noir, dans un repère orthonormé.
# Cellule à exécuter
import matplotlib.pyplot as plt
plt.plot(X, Y, color = 'black')
plt.axis('equal')
plt.show()
Q9. Le fichier Coordonnees_France_Dept.txt
contient la liste des points frontière des départements, chacun étant initialisé par une
ligne Département n
. Il contient aussi des lignes Cut
pour des coupures, permettant
de tracer les îles.
Tracer la carte des départements métropolitains.