78 lines
2.1 KiB
Markdown
78 lines
2.1 KiB
Markdown
---
|
||
title: Informations des répertoires et fichiers
|
||
author: Steve Kossouho
|
||
---
|
||
|
||
# Exploiter le système de fichiers
|
||
|
||
----
|
||
|
||
## Le package `pathlib`
|
||
|
||
Le module `pathlib` de Python 3.4+ (2014) offre des classes orientées objet pour manipuler les chemins de fichiers. Il s'agit
|
||
d'une interface moderne orientée objet pour compléter ou remplacer ce qui se faisait avec le module `os.path`.
|
||
|
||
----
|
||
|
||
### Les objets `pathlib.Path`
|
||
|
||
L'objet `Path` du module `pathlib` représente un chemin de fichier général et offre des méthodes et des propriétés
|
||
pour effectuer diverses opérations sur ledit chemin.
|
||
|
||
```python {.numberLines}
|
||
from pathlib import Path
|
||
|
||
# Créer un objet Path
|
||
p = Path('/chemin/vers/fichier')
|
||
```
|
||
|
||
Créer un chemin. _Le chemin peut ou non exister réellement sur le système local, la seule contrainte étant qu'il soit
|
||
valide par rapport à la norme POSIX (et Windows)_.
|
||
|
||
----
|
||
|
||
### Méthodes utiles des objets `pathlib.Path`
|
||
|
||
Les objets `Path` ont plusieurs méthodes utiles pour gérer un chemin de fichier ou de répertoire. Parmi les outils
|
||
qui renvoient les informations les plus simples :
|
||
|
||
```python {.numberLines}
|
||
from pathlib import Path
|
||
|
||
# Imaginons que bob est un répertoire
|
||
f = Path("/home/bob")
|
||
# Vérifier si un chemin existe
|
||
print(f"Le chemin existe : {f.exists()}")
|
||
|
||
# Générer un objet Path qui est un répertoire enfant de bob
|
||
f2 = f / "morane"
|
||
# M'affiche "/home/bob/morane"
|
||
print(f2)
|
||
|
||
# Vérifier si un chemin est un répertoire
|
||
if p.is_dir():
|
||
print("C'est un répertoire.")
|
||
|
||
# Vérifier si un chemin est un fichier
|
||
if p.is_file():
|
||
print("C'est un fichier.")
|
||
```
|
||
|
||
----
|
||
|
||
### Parcourir récursivement des fichiers avec `pathlib.Path`
|
||
|
||
La méthode `rglob()` des objets `Path` peut être utilisée pour parcourir récursivement des fichiers.
|
||
|
||
```python {.numberLines}
|
||
from pathlib import Path
|
||
|
||
# Parcourir récursivement tous les fichiers .txt
|
||
for fichier in Path('/chemin/vers/répertoire').rglob('*.txt'):
|
||
print(fichier)
|
||
|
||
# Parcourir tous les fichiers .txt du répertoire, sans récursion
|
||
for fichier in Path('/chemin/vers/répertoire').glob('*.txt'):
|
||
print(fichier)
|
||
```
|