Manipuler les fichiers et les dossiers
pathlib : chemins orientés objet
La classe Path facilite la construction de chemins et les opérations courantes sur les fichiers.
| Élément | Rôle |
|---|---|
Path.cwd() / Path.home() |
Répertoire courant / personnel. |
path / "name" |
Construire un chemin enfant. |
exists(), is_file(), is_dir() |
Examiner un chemin. |
mkdir(parents=True, exist_ok=True) |
Créer des dossiers. |
read_text() / write_text() |
Lire / écrire du texte. |
read_bytes() / write_bytes() |
Lire / écrire des octets. |
iterdir() |
Parcourir les enfants directs. |
glob() / rglob() |
Rechercher des chemins par motif. |
rename() / unlink() |
Renommer / supprimer un fichier. |
from pathlib import Path
folder = Path("standard_library_examples")
folder.mkdir(exist_ok=True)
path = folder / "message.txt"
path.write_text("Bonjour Python !", encoding="utf-8")
print(path.read_text(encoding="utf-8"))
for item in sorted(folder.glob("*.txt")):
print(item.name)
write_text() remplace le contenu existant. Path propose aussi name, stem, suffix et parent pour examiner les composants d'un chemin.
Parallèle C# et .NET
string folder = "standard_library_examples";
Directory.CreateDirectory(folder);
string path = Path.Combine(folder, "message.txt");
File.WriteAllText(path, "Bonjour Python !", Encoding.UTF8);
Console.WriteLine(File.ReadAllText(path, Encoding.UTF8));
foreach (string item in Directory.EnumerateFiles(folder, "*.txt").OrderBy(p => p))
Console.WriteLine(Path.GetFileName(item));
Les opérations de Path Python se répartissent entre System.IO.Path, File, Directory, FileInfo et DirectoryInfo. EnumerateFiles() produit les résultats progressivement ; GetFiles() matérialise un tableau. Pour une recherche récursive, utilisons SearchOption.AllDirectories, avec une gestion adaptée des erreurs d’accès. Les règles exactes des motifs ne sont pas toutes identiques à celles de glob().
shutil : opérations de haut niveau
| Fonction | Rôle |
|---|---|
copy(source, destination) |
Copier un fichier et ses permissions. |
copy2(source, destination) |
Copier en tentant aussi de préserver les métadonnées. |
copytree(source, destination) |
Copier une arborescence. |
move(source, destination) |
Déplacer un fichier ou un dossier. |
rmtree(path) |
Supprimer une arborescence. |
disk_usage(path) |
Obtenir l'espace total, utilisé et libre. |
make_archive(...) |
Créer une archive. |
import shutil
from pathlib import Path
folder = Path("standard_library_examples")
folder.mkdir(exist_ok=True)
source = folder / "source.txt"
source.write_text("Exemple", encoding="utf-8")
shutil.copy2(source, folder / "copy.txt")
Les fonctions de suppression agissent réellement sur les données. copy2() ne garantit pas la conservation de toutes les métadonnées sur tous les systèmes.
Parallèle C# et .NET
string folder = "standard_library_examples";
Directory.CreateDirectory(folder);
string source = Path.Combine(folder, "source.txt");
File.WriteAllText(source, "Exemple", Encoding.UTF8);
File.Copy(source, Path.Combine(folder, "copy.txt"), overwrite: true);
File.Copy(), File.Move() et Directory.Move() couvrent les opérations principales. Directory.Delete(path, recursive: true) supprime une arborescence ; DriveInfo renseigne l’espace disque. File.Copy() n’est pas un contrat de préservation de métadonnées identique à copy2(). La copie récursive d’un dossier nécessite une composition ou un outil dédié.
tempfile : ressources temporaires
TemporaryDirectory() crée un dossier temporaire nettoyé à la sortie du bloc with. TemporaryFile() et NamedTemporaryFile() créent des fichiers temporaires.
from pathlib import Path
from tempfile import TemporaryDirectory
with TemporaryDirectory() as folder:
path = Path(folder) / "work.txt"
path.write_text("Traitement temporaire", encoding="utf-8")
print(path.read_text(encoding="utf-8"))
L'ouverture simultanée d'un fichier temporaire nommé dépend des options et du système ; un dossier temporaire est souvent simple pour les traitements impliquant plusieurs outils.
Parallèle C# et .NET
DirectoryInfo folder = Directory.CreateTempSubdirectory("python-book-");
try
{
string path = Path.Combine(folder.FullName, "work.txt");
File.WriteAllText(path, "Traitement temporaire", Encoding.UTF8);
Console.WriteLine(File.ReadAllText(path, Encoding.UTF8));
}
finally
{
folder.Delete(recursive: true);
}
Directory.CreateTempSubdirectory() (.NET 7+) crée un dossier temporaire. Le nettoyage est explicite ici : l’objet DirectoryInfo ne le supprime pas à sa libération. Path.GetTempFileName() crée un fichier ; Path.GetRandomFileName() ne crée rien. L’adaptation d’un TemporaryDirectory s’appuie sur try/finally ou un gestionnaire IDisposable personnalisé.
zipfile : archives ZIP
La classe ZipFile permet de créer, lire et examiner une archive.
| Méthode | Rôle |
|---|---|
write(path, arcname=...) |
Ajouter un fichier. |
writestr(name, data) |
Ajouter directement du contenu. |
namelist() |
Lister les noms. |
read(name) |
Lire les octets d'un membre. |
open(name) |
Ouvrir un membre comme flux. |
from pathlib import Path
from zipfile import ZipFile, ZIP_DEFLATED
folder = Path("standard_library_examples")
folder.mkdir(exist_ok=True)
archive_path = folder / "example.zip"
with ZipFile(archive_path, "w", compression=ZIP_DEFLATED) as archive:
archive.writestr("message.txt", "Bonjour Python !")
with ZipFile(archive_path) as archive:
print(archive.read("message.txt").decode("utf-8"))
Pour des archives externes, contrôlons les noms, les tailles et la destination avant extraction.
Parallèle C# et .NET
string folder = "standard_library_examples";
Directory.CreateDirectory(folder);
string path = Path.Combine(folder, "example.zip");
using (var file = File.Create(path))
using (var archive = new ZipArchive(file, ZipArchiveMode.Create))
{
var entry = archive.CreateEntry("message.txt", CompressionLevel.Optimal);
using var writer = new StreamWriter(entry.Open(), new UTF8Encoding(false));
writer.Write("Bonjour Python !");
}
using (var archive = ZipFile.OpenRead(path))
using (var reader = new StreamReader(archive.GetEntry("message.txt")!.Open(), Encoding.UTF8))
Console.WriteLine(reader.ReadToEnd());
System.IO.Compression fournit ZipArchive, ZipFile et leurs entrées. ZipFile.CreateFromDirectory() archive un dossier. Le using C# joue ici le rôle du with Python pour fermer les flux et finaliser l’archive.