Fichiers & chemins#
courant
pathlib (recommandé)#
from pathlib import Path
p = Path("dossier") / "sous_dossier" / "fichier.txt" # construction indépendante de l'OS
p.exists(); p.is_file(); p.is_dir()
p.name # "fichier.txt"
p.stem # "fichier"
p.suffix # ".txt"
p.parent # Path("dossier/sous_dossier")
p.parts # ('dossier', 'sous_dossier', 'fichier.txt')
p.read_text(encoding="utf-8")
p.write_text("contenu", encoding="utf-8")
Path(".").glob("*.py") # génère les fichiers .py du dossier courant
Path(".").rglob("*.py") # récursif
Path("nouveau_dossier").mkdir(parents=True, exist_ok=True)
p.unlink(missing_ok=True) # supprime le fichier
Opérations de haut niveau : shutil#
Pour copier des fichiers ou manipuler des arborescences complètes :
import shutil
shutil.copy2("source.txt", "destination.txt") # copie fichier + métadonnées
shutil.copytree("dossier_source", "dossier_dest") # copie récursive d'un dossier
shutil.move("source.txt", "nouveau_dossier/") # déplace ou renomme
shutil.rmtree("dossier_a_supprimer") # supprime récursivement un dossier
os / os.path (historique)#
import os
os.getcwd() # dossier courant
os.listdir(".") # contenu d'un dossier
os.path.join("a", "b", "c.txt") # "a/b/c.txt"
os.path.exists("fichier.txt")
os.path.isfile("fichier.txt"); os.path.isdir("dossier")
os.makedirs("a/b/c", exist_ok=True)
os.remove("fichier.txt")
os.rename("ancien.txt", "nouveau.txt")
os.environ.get("HOME")
sys#
import sys
sys.argv # liste des arguments de la ligne de commande (['script.py', 'arg1'])
sys.path # chemins de recherche des modules
sys.exit(0) # quitte le programme (0 = succès, >0 = code d'erreur)
sys.version_info # version de Python
Arguments en ligne de commande : argparse#
Pour créer des scripts de commande robustes avec aide automatique (-h) sans dépendance externe :
import argparse
parser = argparse.ArgumentParser(description="Script de simulation / calcul")
parser.add_argument("entree", help="Fichier d'entrée à traiter")
parser.add_argument("-n", "--iterations", type=int, default=100, help="Nombre d'itérations")
parser.add_argument("-v", "--verbose", action="store_true", help="Mode verbeux")
args = parser.parse_args()
print(f"Traitement de {args.entree} avec {args.iterations} itérations (verbose={args.verbose})")