Aller au contenu

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})")

Parcours de dossier#

for chemin in Path(".").rglob("*.txt"):
    print(chemin)

for racine, dossiers, fichiers in os.walk("."):
    for f in fichiers:
        print(os.path.join(racine, f))