Vous êtes sur la page 1sur 40

6 - Fichiers

INF2 – P23
1 - Un fichier ?
1.1 – POUR QUOI FAIRE ?
1.2 – TYPES DE FICHIERS

INF2 - P23 COURS 6 - FICHIERS 2


1.1 – Un fichier ?
• Un fichier est un document stocké sur une mémoire
permanente (disque dur, mémoire flash…)

• Mais pourquoi faire ?


• Conserver l’information
• Partager l’information dans un format exploitable
• Traiter un grand nombre d’informations

EXEMPLE
Je dois calculer la moyenne des étudiants à l’examen le lundi et le mercredi refaire le calcul. Imaginez
un instant s’il fallait entrer toutes les notes à la main à chaque exécution du programme !

INF2 - P23 COURS 6 - FICHIERS 3


1.2 – Types de fichiers
En Python, il n’existe que deux types de fichiers.
Tout ce qui n’est pas du texte est binaire

Fichier binaire

Fichier texte

INF2 - P23 COURS 6 - FICHIERS 4


2 – Les fichiers avec
Python
2.1 – CYCLE DE VIE
2.2 – MANIPULATION (OPÉRATIONS CRUD)

INF2 - P23 COURS 6 - FICHIERS 5


2.1 – Cycle de vie
BONUS
Ce fonctionnement est le même pour
beaucoup de langages de programmation ☺

Création Ouverture Manipulation Fermeture

INF2 - P23 COURS 6 - FICHIERS 6


2.1 – Cycle de vie – open()
Une seule fonction pour créer et ouvrir les fichiers : open
Création
Deux informations sont nécessaires pour ouvrir un fichier :
• Où est le fichier ? → chemin
• Qu’est-ce que je veux en faire ? → mode

Ouverture

SYNTAXE

Manipulation open(file, mode='r')

Chemin absolu ou relatif vers le fichier


Fermeture
Mode d’ouverture du fichier (lecture par défaut)

INF2 - P23 COURS 6 - FICHIERS 7


2.1 – Cycle de vie - Modes d’ouverture
Les modes d’ouverture SYNTAXE
Création open(file, mode='r')

Mode Description
‘r’ Lecture seule (par défaut), exception levée s’il n’existe pas
Ouverture ‘w’ Écriture seule, fichier écrasé s’il existe déjà
‘x’ Création puis écriture, exception levée si le fichier existe déjà
‘a’ Ajout, écrit à la fin du fichier s’il existe, le créé sinon

Manipulation ‘b’ Mode binaire


‘t’ Mode texte (par défaut)
‘+’ Ouverture en lecture + écriture

Fermeture Les modes sont combinables ! ‘w+b’ ouvre un fichier en l’écrasant, permet de lire et écrire
dedans et le tout en binaire !

INF2 - P23 COURS 6 - FICHIERS 8


2.1 – Cycle de vie – Exemples d’ouverture
Exemples d’ouvertures et exceptions mon_dossier
Création
exemple.py

fichier_a_ouvrir.txt

Ouverture

Manipulation

Fermeture

INF2 - P23 COURS 6 - FICHIERS 9


2.1 – Cycle de vie – Lecture d’un fichier texte
Lecture d’un fichier texte (ouvert avec ‘r’ ou ‘+’)
Création

Il existe différentes manières de lire un fichier en python :


• Tout le fichier d’un coup
• Ligne par ligne
Ouverture • Quelques lignes
• Quelques caractères
• …

EXEMPLE
Manipulation

Fermeture

INF2 - P23 COURS 6 - FICHIERS 10


2.1 – Cycle de vie – Lecture d’un fichier texte
Lecture d’un fichier texte (ouvert avec ‘r’ ou ‘+’)
Création • read(size=-1) lit et retourne au plus size caractères en une seule chaîne
de caractères.

• readline(size=-1) lit une ligne à partir de la position courante et jusqu’à


trouver EOL ou EOF. Retourne un str d’au plus size caractères.
Ouverture
• readlines(hint=-1) lit et retourne un tableau de lignes. Si hint est
spécifié, la fonction retournera les premières lignes du fichier jusqu’à dépasser
hint caractères.

Manipulation BONUS
• seek(offset, whence=SEEK_SET) déplace le curseur dans le fichier de
offset caractères relativement à la position donnée par whence.

Fermeture • tell() retourne la position actuelle du curseur dans le fichier

INF2 - P23 COURS 6 - FICHIERS 11


2.1 – Cycle de vie – Lecture d’un fichier texte
Parcourir toutes les lignes d’un fichier texte
Création
readlines permet de récupérer la liste des lignes mais ce n’est pas le
plus efficace (en mémoire) !

Ouverture L’objet TextIOWrapper est itérable.

fichier = open("fichier_a_ouvrir.txt")
for ligne in fichier: Utilisation de l’itérateur
Manipulation # faire des choses

fichier = open("fichier_a_ouvrir.txt")
for ligne in fichier.readlines():
Fermeture # Bien réfléchir, est-ce que j'ai besoin
# de toutes les lignes dans une liste ?

INF2 - P23 COURS 6 - FICHIERS 12


2.1 – Cycle de vie – Écriture dans un fichier texte
Écriture dans un fichier texte (ouvert avec ‘w’, ‘a’, ‘x’ ou ‘r+’)
Création
SYNTAXE
TextIOWrapper.write(self, content)
Ouverture
Chaîne de caractères à écrire

Manipulation
SYNTAXE
TextIOWrapper.writelines(self, lines)

Fermeture
Liste de chaînes de caractères à écrire

INF2 - P23 COURS 6 - FICHIERS 13


2.1 – Cycle de vie – Écriture dans un fichier texte
Écriture dans un fichier texte (ouvert avec ‘w’, ‘a’, ‘x’ ou ‘r+’)
Création
EXEMPLE
fichier = open("fichier_a_ouvrir.txt", "w")
fichier.write("INF2 ça réveille\n")
Ouverture
fichier.write("Surtout le jeudi à 8h !")

Manipulation
ATTENTION
Le mode ‘w’ écrase le fichier s’il existe

Fermeture

INF2 - P23 COURS 6 - FICHIERS 14


2.1 – Cycle de vie – Fermeture du fichier
Après avoir manipulé le fichier il faut le fermer. Tant qu’un fichier est
Création ouvert il ne peut pas être utilisé par d’autres programmes (exclusion en
écriture).

SYNTAXE
Ouverture TextIOWrapper.close(self)

Manipulation
EXEMPLE
fichier = open("fichier_a_ouvrir.txt", "w")
fichier.write("INF2 ça réveille\n")
# ...
Fermeture fichier.close()

INF2 - P23 COURS 6 - FICHIERS 15


2.1 – Cycle de vie – L’instruction with…as
Il est possible d’inclure les opérations de manipulation du fichier dans un
Création bloc with … as. Dans ce cas, la fermeture du fichier est automatique.

EXEMPLE
with open("fichier_a_ouvrir.txt", "r+") as fichier:
Ouverture contenu = fichier.read()
fichier.write("ecriture dans mon fichier...")
print(f"dans le bloc with, closed = {fichier.closed}")
print(f"En dehors du bloc with, closed = {fichier.closed}")

Manipulation

SORTIE
dans le bloc with, closed = False
Fermeture En dehors du bloc with, closed = True

INF2 - P23 COURS 6 - FICHIERS 16


3 – Fichiers structurés
3 . 1 – L A BI BL I OT HÈQU E CSV
3 . 2 – L A BI BL I OT HÈQU E PA N DAS ( I N T RODU C TI ON)
3 . 3 – ( DÉ ) SÉRI ALISATION

INF2 - P23 COURS 6 - FICHIERS 17


3.1 – CSV
Un fichier CSV (Comma Separated Values) est un fichier texte structuré utilisé pour la
représentation de tableaux.
Sa structure le rend facilement lisible par un humain mais aussi par un programme ☺
Nom,median,TP,final
ADNET NATANAËL,7.5,16.6,10.7
ANGE HUBERT,5.25,11.4,17.0
ARDOUIN ANNE-MARIE,12.9,20.0,16.0
ARDOUIN AXELLE,13.2,6.8,15.1
BARRAULT MATTHIEU,6.75,12.5,5.9
BEAULNE JEAN-PASCAL,14.45,18.8,10.4
BEAUVILLIERS FRANCK,14.45,20.0,9.3
BECHARD WILLIAM,11.7,20.0,10.9
BÉLIVEAU BAPTISTE,14.65,8.7,2.6
BERTILLON JEAN-MARC,6,19.9,9.0
BERTILLON YVETTE,4.75,7.2,
BETHUNE RÉMI,7.8,8.0,12.3
BLANCHARD NADIA,14.3,8.6,3.6
BLANCHET VICTORIA,16.95,20.0,13.9

ATTENTION
La standardisation du format csv (RFC4180) a été tardive donc il existe des différences entre les fichiers CSV en
fonction de l’application source (ex. Microsoft utilise le ‘;’ en séparateur).

INF2 - P23 COURS 6 - FICHIERS 18


IMPORTANT
3.1 – CSV Le csv, c’est du texte !
Il ne gère pas les cellules complexes (formules).
Anatomie d’un fichier CSV
Ligne d’en-tête (facultative !)
Nom,median,TP,final
ADNET NATANAËL,7.5,16.6,10.7
ANGE HUBERT,5.25,11.4,17.0
ARDOUIN ANNE-MARIE,12.9,20.0,16.0 Chaque ligne de texte représente 1 ligne du tableau
ARDOUIN AXELLE,13.2,6.8,15.1
BARRAULT MATTHIEU,6.75,12.5,5.9
BEAULNE JEAN-PASCAL,14.45,18.8,10.4
BEAUVILLIERS FRANCK,14.45,20.0,9.3 Les valeurs de colonnes pour chaque entrée sont
BECHARD WILLIAM,11.7,20.0,10.9 séparées par un symbole:
BÉLIVEAU BAPTISTE,14.65,8.7,2.6 • la virgule
BERTILLON JEAN-MARC,6,19.9,9.0 • le point virgule
BERTILLON YVETTE,4.75,,7.5 • autre chose 🤷‍♀️
BETHUNE RÉMI,7.8,8.0,12.3
BLANCHARD NADIA,14.3,8.6,3.6
BLANCHET VICTORIA,16.95,20.0,13.9
Cellule sans valeur

INF2 - P23 COURS 6 - FICHIERS 19


3.1 – CSV - lecture
Pour exploiter les fichiers csv dans Python, on peut s’aider du module …. csv

Pour lire un fichier csv en Python il faut :


1. Importer le module csv (import csv)
2. Ouvrir le fichier normalement
3. Créer une instance de csvreader
4. Itérer sur l’objet reader, chaque ligne est renvoyée sous forme d’une liste de str

3 - SYNTAXE
csv.reader(file, dialect=‘excel’, **params)

Résultat de l’appel à open()


Spécifications sur le format. Permet de
spécifier delimiter, escapechar,
Ensemble de spécifications sur la gestion lineterminator…
des guillemets, espaces, délimiteurs … - prioritaire sur les valeurs spécifiées dans « dialect »

INF2 - P23 COURS 6 - FICHIERS 20


3.1 – CSV - lecture
Utilisation la plus simple de csv.reader
notes.csv EXEMPLE
Nom,median,TP,final
ADNET NATANAËL,7.5,16.6,10.7 with open("notes.csv") as file:
ANGE HUBERT,5.25,11.4,17.0
ARDOUIN ANNE-MARIE,12.9,20.0,16.0 reader = csv.reader(file, delimiter=',')
ARDOUIN AXELLE,13.2,6.8,15.1 for line in reader:
BARRAULT MATTHIEU,6.75,12.5,5.9
BEAULNE JEAN-PASCAL,14.45,18.8,10.4
print(line)
BEAUVILLIERS FRANCK,14.45,20.0,9.3
BECHARD WILLIAM,11.7,20.0,10.9
BÉLIVEAU BAPTISTE,14.65,8.7,2.6
BERTILLON JEAN-MARC,6,19.9,9.0
BERTILLON YVETTE,4.75,7.2,
SORTIE
BETHUNE RÉMI,7.8,8.0,12.3 ['Nom', 'median', 'TP', 'final']
BLANCHARD NADIA,14.3,8.6,3.6
['ADNET NATANAËL', '7.5', '16.6', '10.7']
BLANCHET VICTORIA,16.95,20.0,13.9
['ANGE HUBERT', '5.25', '11.4', '17.0']
['ARDOUIN ANNE-MARIE', '12.9', '20.0', '16.0']
['ARDOUIN AXELLE', '13.2', '6.8', '15.1']
['BARRAULT MATTHIEU', '6.75', '12.5', '5.9']
ATTENTION ['BEAULNE JEAN-PASCAL', '14.45', '18.8', '10.4']
Les items des listes sont tous des str. ['BEAUVILLIERS FRANCK', '14.45', '20.0', '9.3']
['BECHARD WILLIAM', '11.7', '20.0', '10.9']
Même les « nombres ».

INF2 - P23 COURS 6 - FICHIERS 21


3.1 – CSV – lecture sous forme de dictionnaire
DictReader permet de récupérer chaque ligne sous forme d’un dictionnaire.
Les clés sont noms des colonnes.
EXEMPLE
with open("notes.csv", encoding="utf-8") as file:
dict_reader = csv.DictReader(file)
for dict_row in dict_reader:
print(dict_row)

SORTIE
{'Nom': 'ADNET NATANAËL', 'median': '7.5', 'TP': '16.6', 'final': '10.7'}
{'Nom': 'ANGE HUBERT', 'median': '5.25', 'TP': '11.4', 'final': '17.0'}
{'Nom': 'ARDOUIN ANNE-MARIE', 'median': '12.9', 'TP': '20.0', 'final': '16.0'}
{'Nom': 'ARDOUIN AXELLE', 'median': '13.2', 'TP': '6.8', 'final': '15.1'}
{'Nom': 'BARRAULT MATTHIEU', 'median': '6.75', 'TP': '12.5', 'final': '5.9'}
{'Nom': 'BEAULNE JEAN-PASCAL', 'median': '14.45', 'TP': '18.8', 'final': '10.4'}
{'Nom': 'BEAUVILLIERS FRANCK', 'median': '14.45', 'TP': '20.0', 'final': '9.3'}
{'Nom': 'BECHARD WILLIAM', 'median': '11.7', 'TP': '20.0', 'final': '10.9'}
{'Nom': 'BÉLIVEAU BAPTISTE', 'median': '14.65', 'TP': '8.7', 'final': '2.6'}

INF2 - P23 COURS 6 - FICHIERS 22


3.1 – CSV - écriture
Pour écrire dans un fichier csv en python il faut :
1. Importer le module csv (import csv)
2. Ouvrir le fichier de destination normalement (en écriture !)
3. Créer une instance de csvwriter
4. Utiliser la fonction writerow ou writerows

3 - SYNTAXE
csv.writer(file, dialect=‘excel’, **params)

Résultat de l’appel à open()


Spécifications sur le format. Permet de
spécifier delimiter, escapechar,
Ensemble de spécifications sur la gestion lineterminator…
des guillemets, espaces, délimiteurs … - prioritaire sur les valeurs spécifiées dans « dialect »

INF2 - P23 COURS 6 - FICHIERS 23


3.1 – CSV – écriture avec writerows

EXEMPLE

data = [
etudiants.csv
["Nom", "Prénom", "Niveau"],
["Michel", "Adeline", "TC03"],
Nom,Prénom,Niveau
["Jumel", "Loïc", "GX92"]
] Michel,Adeline,TC03
with open("etudiants.csv", "w") as file: Jumel,Loïc,GX92
writer = csv.writer(file, lineterminator="\n", delimiter=";")
writer.writerows(data)

INFO
Il est aussi possible d’écrire ligne par ligne en utilisant writerow

INFO
DictWriter permet d’écrire les données en se basant sur des dictionnaires en entrée.

INF2 - P23 COURS 6 - FICHIERS 24


3.2 – Pandas (introduction)
pandas est une librairie dédiée à la manipulation et l’analyse
de données tabulaires.
Lecture des données
Construite par-dessus numpy, l’objectif est de proposer : pandas.read_*
◦ Des fonctions d’import/export données depuis/vers des sources
multiples
◦ Fichier CSV
◦ Fichier Excel
◦ Base de données Manipulation d’un
◦ JSON DataFrame
◦ XML
◦ Dictionnaire
◦ …

◦ Des objets uniques pour manipuler les données peu importe leur
format d’origine Écriture des données
◦ Series (1D) pandas.to_*
◦ DataFrame (2D)

INF2 - P23 COURS 6 - FICHIERS 25


3.2 – Pandas – DataFrame et Series

Le DataFrame est l’objet qui va permettre toutes les


manipulations de données.
Chaque colonne du DataFrame et un objet de type
Series

BONNE PRATIQUE
L’import de la librairie pandas se fait avec un alias !
import pandas as pd

INF2 - P23 COURS 6 - FICHIERS 26


3.2 – Pandas – Mon premier DataFrame
Il est possible de créer un DataFrame en utilisant un dictionnaire dont les clés sont les noms des
colonnes et les valeurs les listes définissant les valeurs des colonnes.

EXEMPLE

import pandas as pd SORTIE


df = pd.DataFrame(
{
prenom nom age
"prenom" : ["Adeline", "Loïc", "Noah"],
0 Adeline Michel 18
"nom" : ["Michel", "Jumel", "Larrache"],
1 Loïc Jumel 25
"age": [18, 25, 16]
2 Noah Larrache 16
}
)
print(df)

INF2 - P23 COURS 6 - FICHIERS 27


3.2 – Pandas – Quelques méthodes sur les DataFrame
df
prenom nom age
0 Adeline Michel 18
1 Loïc Jumel
2 Noah Larrache 16

DataFrame.info() df.info() DataFrame.describe()


Vérifier les données lues (colonnes, types, nombre de valeurs…) Récupérer des statistiques sur les données
<class 'pandas.core.frame.DataFrame'> print(df.describe())
RangeIndex: 3 entries, 0 to 2
Data columns (total 3 columns): age
# Column Non-Null Count Dtype count 2.000000
--- ------ -------------- ----- mean 17.000000
0 prenom 3 non-null object std 1.414214
1 nom 3 non-null object min 16.000000
2 age 2 non-null float64 25% 16.500000
dtypes: float64(1), object(2) 50% 17.000000
memory usage: 200.0+ bytes 75% 17.500000
max 18.000000

INF2 - P23 COURS 6 - FICHIERS 28


3.2 – Pandas – Quelques méthodes sur les DataFrame
En bonus :
• DataFrame.shape Renvoie un tuple (nb_lignes, nb_cols)

• DataFrame.columns Renvoie une liste avec le nom des colonnes

• DataFrame.head(n) Affiche les n premières lignes du DataFrame

• DataFrame.dtypes Permet de connaître le type des colonnes

• print(DataFrame) Affiche les 5 premières et 5 dernières lignes (permet de vérifier les données)

ENCORE PLUS !
Pandas permet un grand nombre d’autres manipulations sur les DataFrames (agrégations,
timeseries, tri, jointures, statistiques, graphiques avec matplotlib…)
https://pandas.pydata.org/docs/

INF2 - P23 COURS 6 - FICHIERS 29


3.2 – Pandas – manipulation de données dans un DataFrame
df
Extraire une cellule : df.iloc[1, 1]
prenom nom age
0 Adeline Michel 18 Extraire une plage : df.iloc[0:2, 0:2]
1 Loïc Jumel 25
2 Noah Larrache 16
Ajouter une Series au DataFrame (constante) :
df['gentil'] = "Ouiii"
Extraire une colonne (Series) :
prenoms = df['prenom'] Opérations sur les Series :
prenoms = df.prenom prenom_nom = (df['prenom'] + '.' + df['nom'])
prenoms = df[df.columns[0]] age_moins_10 = df['age'] - 10

Extraire des lignes avec une Sélectionner des valeurs avec une condition et un
condition (DataFrame) : nom de colonne :
minors = df[df["age"] < 18] df.loc[df['age'] > 20, 'gentil'] = "Non"

INF2 - P23 COURS 6 - FICHIERS 30


3.2 – Pandas – import/export de données
Toutes les fonctions d’import de la forme pd.read_* produisent un DataFrame.

IMPORT CSV EXPORT EXCEL


pd.read_csv(filepath, **params) DataFrame.to_excel(file, **params)

Plus besoin d’ouvrir le fichier avec


open(), c’est pandas qui s’en charge !

Format de fichier Nom de la feuille


Index et noms des colonnes Gestion des nombres
Gestion des erreurs Colonnes/Lignes à exporter
Gestion des données de type date …
Gestion des valeurs nulles / manquantes

N’AYEZ PAS PEUR DE LA DOC ☺


INF2 - P23 COURS 6 - FICHIERS 31
3.3 – Pickle : (Dé)Sérialisation
Problématique : Comment stocker et partager les données de Désérialisation
mon programme (hors format tableur). Fichier binaire Bytes
représentant un représentant un
objet Python objet Python

Il faut déterminer une structure pour le stockage.


◦ Texte : JSON, XML, CSV, format personnalisé, … pickle.load pickle.loads

◦ Binaire

Objet Python
Pickle est un module qui permet d’effectuer les opérations de
sérialisation et de désérialisation sur les objets Python.
pickle.dump pickle.dumps

Fichier binaire Bytes


représentant un représentant un
objet Python objet Python
Sérialisation

INF2 - P23 COURS 6 - FICHIERS 36


3.3 – Pickle : Sérialisation
La sérialisation dans un fichier binaire se fait par l’appel à la
méthode dump (dumps pour générer un ByteArray)

SYNTAXE
pickle.dump(obj, file)

Objet à sérialiser Objet Python

Résultat de l’appel à open() en mode binaire. pickle.dump pickle.dumps

Doit être accessible en écriture

Fichier binaire Bytes


représentant un représentant un
objet Python objet Python
Sérialisation

INF2 - P23 COURS 6 - FICHIERS 37


3.3 – Pickle : Désérialisation
La sérialisation dans un fichier binaire se fait par l’appel à la Désérialisation
méthode dump (dumps pour générer un ByteArray) Fichier binaire Bytes
représentant un représentant un
objet Python objet Python
SYNTAXE
obj = pickle.load(file) pickle.load pickle.loads

Objet désérialisé Objet Python

Résultat de l’appel à open() en mode binaire.


Doit être accessible en lecture

INF2 - P23 COURS 6 - FICHIERS 38


3.3 – Pickle : (Dé)Sérialisation
Exemple : Sérialisation et désérialisation d’un objet de la classe Etudiant avec pickle.

class Etudiant: # Création d'une instance d'étudiant


def __init__(self, nom, prenom): e1 = Etudiant("Jean", "Michel")
self.nom = nom e1.ajouter_note_uv("INF2", "FX")
self.prenom = prenom e1.ajouter_note_uv("INF1", "E")
self._notes = {} print(e1.get_notes())
def ajouter_note_uv(self, uv, note):
# Sérialisation
self._notes[uv] = note
with open("e1.data", "wb") as e1_fichier_dump:
def get_notes(self): pickle.dump(e1, e1_fichier_dump)
return self._notes
# Désérialisation
with open("e1.data", "rb") as e1_fichier_dump:
e_deserialise = pickle.load(e1_fichier_dump)
print(e_deserialise.nom, e_deserialise.get_notes())

EXCEPTION
Si une erreur est rencontrée lors de la sérialisation/désérialisation une exception de type
pickle.PiclingError/pickle.UnpicklingError sera levée

INF2 - P23 COURS 6 - FICHIERS 39


3.3 – Pickle : (Dé)Sérialisation
Pickle gère seul la sérialisation des objets suivants :
◦ None, booléens
◦ Nombres
◦ Chaînes de catactère
◦ Tuples, lists, sets, dictionnaires (contenant des types natifs)
◦ Instances de classe (par l’appel à __getstate__()). SEULS LES ATTRIBUTS SONT SÉRIALISÉS.

Il est possible de définir à la main le résultat de la (dé)sérialisation par les méthodes d’instance
__getstate__ et __setstate__.

RAPPEL
Sérialiser ≠ Écrire dans un fichier ≠ Archiver
On peut sérialiser pour transmettre des données sur un canal réseau par exemple.

INF2 - P23 COURS 6 - FICHIERS 40


4 – Gestion des fichiers
et répertoires
4 . 1 – A R BOR ESCENCE DE F I CHI E RS
4 . 2 – G ESTION DES F I CHI E RS
4 . 3 – MA N I PULATI ON DES R É P ERTOI RES

INF2 - P23 COURS 6 - FICHIERS 41


4.1 – Arborescence de fichiers
Le système d’exploitation repose sur des fichiers organisés dans une arborescence.
• Windows : plusieurs racines possibles (C:\, D:\, …)
• Unix / MacOS / Android : une unique racine (/)

Python propose de gérer les fichiers et arborescence d’une manière C:\ (ou /)
unifiée avec le module pathlib et sa classe Path :
mon_dossier
• Opérateur / pour créer un chemin avec le bon séparateur en fonction de
l’OS exemple.py
• \ pour les systèmes Windows p = Path("C:\\")
• / pour les systèmes Unix p = p / "Users" / "toto" → C:\Users\toto
fichier_a_ouvrir.txt

• absolute() permet de récupérer le chemin absolu d’un fichier Autre_dossier


• Exemple : Path('fichier_a_ouvrir.txt’).absolute() → C:\mon_dossier\fichier_a_ouvrir.txt

• exists() permet de vérifier l’existence d’un chemin

INF2 - P23 COURS 6 - FICHIERS 42


4.2 - Gestion des fichiers
La bibliothèque pathlib permet aussi de manipuler les fichiers :
• Path(chemin).is_file() → vérifier que le chemin correspond à un fichier
• Path(chemin).unlink() → supprime le fichier ciblé

Pour des opérations de mouvement, il est possible d’utiliser la bibliothèque shutil


• shutil.copy(src, dst) → Copie de fichier depuis src vers dst
• shutil.move(src, dst) → Déplacement du fichier

Pour les opérations de recherche, un exemple avec glob :


• Path(".").glob(« *.txt ») recherche tous les fichiers ayant pour extension « txt » dans le
répertoire courant. Renvoie une liste d’objets Path.

INF2 - P23 COURS 6 - FICHIERS 43


4.3 - Manipulation des répertoires
Quelques manipulations de répertoires avec pathlib :
• Path(chemin).is_dir() → vérifie que le chemin correspond à un dossier
• Path(chemin).rmdir() → supprime le dossier ciblé s’il est vide
• Path(chemin).mkdir() → créé le dossier
• Path(chemin).cwd() → renvoie le chemin absolu vers le dossier courant
• Path(chemin).parent → permet de récupérer le Path vers le dossier parent
• Path(chemin).iterdir()→ renvoie la liste des items dans le dossier visé (par défaut le dossier
courant)

Manipulations des répertoires avec shutil :


• rmtree(path) → Suppression de l’arborescence
• shutil.copytree(src, dst)

INF2 - P23 COURS 6 - FICHIERS 44

Vous aimerez peut-être aussi