shutil.copytree() și shutil.ignore_patterns() în Python

Copiere și arhive (shutil) Python 3.0+ (dirs_exist_ok: 3.8+)

Copiază un director întreg, cu toate subdirectoarele, opțional ignorând anumite fișiere.

Sintaxă
shutil.copytree(sursa, destinatie, ignore=None, dirs_exist_ok=False)
shutil.ignore_patterns(*modele)

Ce face shutil.copytree() și shutil.ignore_patterns()

copytree() copiază recursiv tot conținutul directorului sursa într-un director nou, destinatie. Implicit, destinația nu trebuie să existe; cu dirs_exist_ok=True (3.8+) copiază peste un director existent.

ignore=shutil.ignore_patterns("*.pyc", "__pycache__") sare peste fișierele și directoarele care se potrivesc modelelor. Fișierele sunt copiate implicit cu copy2.

Parametri

Parametru Descriere
sursa, destinatie Directorul copiat și noul director.
ignore Funcție care alege ce se ignoră (de obicei ignore_patterns).
dirs_exist_ok Permite o destinație existentă.

Ce returnează

Calea destinației.

Exemple

Exemplul 1: Copie de siguranță fără fișiere temporare

import shutil
from pathlib import Path
for f in ["app/main.py", "app/__pycache__/main.cpython-314.pyc", "app/date/setari.json", "app/jurnal.log"]:
    Path(f).parent.mkdir(parents=True, exist_ok=True)
    Path(f).touch()
shutil.copytree("app", "app_backup", ignore=shutil.ignore_patterns("__pycache__", "*.log"))
print(sorted(str(p) for p in Path("app_backup").rglob("*")))
shutil.copytree("app", "app_backup", dirs_exist_ok=True)
print(Path("app_backup/jurnal.log").exists())

Rezultat

['app_backup/date', 'app_backup/date/setari.json', 'app_backup/main.py']
True

Greșeli frecvente

  • Rulezi copytree a doua oară spre aceeași destinație și primești FileExistsError. Adaugă dirs_exist_ok=True.

Comenzi înrudite