---
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)
```
