#!/usr/bin/env catnip
# Manipulation de fichiers et chemins avec pathlib
# pathlib fournit une API orientée objet pour les chemins de fichiers
pathlib = import('pathlib')
tempfile = import('tempfile')
shutil = import('shutil')
# Création de chemins
home = pathlib.Path.home()
cwd = pathlib.Path.cwd()
print("⇒ Chemins de base")
print(" Home:", home)
print(" CWD:", cwd)
# Création de chemins relatifs et absolus
docs = pathlib.Path("docs")
readme = docs / "README.md"
print()
print("⇒ Construction de chemins")
print(" Relatif:", docs)
print(" Composé:", readme)
print(" Absolu:", readme.resolve())
# Inspection de chemins
# META.file = chemin du script courant (indépendant du CWD)
test_path = pathlib.Path(META.file)
print()
print("⇒ Décomposition d'un chemin")
print(" Chemin:", test_path)
print(" Parent:", test_path.parent)
print(" Nom:", test_path.name)
print(" Stem:", test_path.stem)
print(" Suffixe:", test_path.suffix)
print(" Parts:", test_path.parts)
# Tests d'existence
script_dir = test_path.parent
print()
print("⇒ Tests d'existence")
print(" Dossier du script existe:", script_dir.exists())
print(" Est un dossier:", script_dir.is_dir())
print(" Est un fichier:", test_path.is_file())
print(" fake.txt existe:", (script_dir / "fake.txt").exists())
# Lecture de fichier
print()
print("⇒ Lecture de fichier")
content = test_path.read_text()
lines = content.split("\n")
print(" Lignes totales:", len(lines))
print(" Première ligne:", lines[0])
# Fichier introuvable
print()
print("⇒ Fichier introuvable")
try {
pathlib.Path("/tmp/does_not_exist.txt").read_text()
} except {
e: RuntimeError => { print(" Attrapé:", e) }
}
# Création de dossier temporaire
temp_dir = pathlib.Path(tempfile.mkdtemp())
print()
print("⇒ Dossier temporaire créé")
print(" Chemin:", temp_dir)
# Écriture d'un fichier
test_file = temp_dir / "test.txt"
test_file.write_text("Hello from Catnip!")
print()
print("⇒ Écriture de fichier")
print(" Fichier créé:", test_file.exists())
print(" Contenu:", test_file.read_text())
# Créer une sous-arborescence
subdir = temp_dir / "data" / "2024"
subdir.mkdir(parents=True)
print()
print("⇒ Création de sous-dossiers")
print(" data/2024/ créé:", subdir.exists())
# Itération sur un dossier
print()
print("⇒ Contenu du dossier temp")
for item in temp_dir.iterdir() {
type_str = if item.is_dir() { "DIR" } else { "FILE" }
print(" [" + type_str + "]", item.name)
}
# Nettoyage
shutil.rmtree(str(temp_dir))
print()
print("⇒ Nettoyage effectué")
print(" Temp supprimé:", not temp_dir.exists())