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
copytreea doua oară spre aceeași destinație și primeștiFileExistsError. Adaugădirs_exist_ok=True.
Comenzi înrudite
shutil.copy(), copy2(), copyfile() și rudele lor: Copiază fișiere: doar conținutul, conținutul cu permisiunile, sau și datele de modificare.shutil.rmtree(): Șterge un director împreună cu tot conținutul lui.shutil.make_archive() și shutil.unpack_archive(): Creează și dezarhivează arhive zip și tar dintr-o singură comandă.