0Pricing
Python Academy · Lekcja

shutil do operacji na plikach

Kopiuj, przenoś i archiwizuj pliki

shutil do operacji na plikach to bezpłatna lekcja Python Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Python Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Python Academy zawiera 4 lekcji w sumie.

Czym jest shutil?

Moduł shutil (narzędzia powłoki) udostępnia operacje na plikach wysokiego poziomu: kopiowanie, przenoszenie, usuwanie drzew katalogów i tworzenie archiwów. Rozszerza moduł os o funkcje przydatne w codziennych zadaniach.

import shutil, os

os.makedirs('/tmp/shutil_demo', exist_ok=True)
with open('/tmp/shutil_demo/a.txt', 'w') as f:
    f.write('hello')
print('created a.txt')

Kopiowanie pliku

shutil.copy(src, dst) kopiuje zawartość pliku oraz jego bity uprawnień do nowej lokalizacji.

import shutil, os

os.makedirs('/tmp/shutil_demo', exist_ok=True)
with open('/tmp/shutil_demo/src.txt', 'w') as f:
    f.write('data')
shutil.copy('/tmp/shutil_demo/src.txt', '/tmp/shutil_demo/copy.txt')
print(os.path.exists('/tmp/shutil_demo/copy.txt'))

copy a copy2

shutil.copy2 działa podobnie jak copy, ale dodatkowo zachowuje metadane, takie jak znaczniki czasu. Należy go używać, gdy istotne są czasy modyfikacji.

import shutil, os

os.makedirs('/tmp/shutil_demo', exist_ok=True)
with open('/tmp/shutil_demo/m.txt', 'w') as f:
    f.write('x')
shutil.copy2('/tmp/shutil_demo/m.txt', '/tmp/shutil_demo/m2.txt')
print('copied with metadata')

Kopiowanie całego drzewa

shutil.copytree(src, dst) rekurencyjnie kopiuje cały katalog. Katalog docelowy nie może już istnieć, chyba że zostanie przekazane dirs_exist_ok=True.

import shutil, os

os.makedirs('/tmp/tree_src/sub', exist_ok=True)
with open('/tmp/tree_src/sub/f.txt', 'w') as f:
    f.write('hi')
shutil.rmtree('/tmp/tree_dst', ignore_errors=True)
shutil.copytree('/tmp/tree_src', '/tmp/tree_dst')
print(os.path.exists('/tmp/tree_dst/sub/f.txt'))

Przenoszenie plików i folderów

shutil.move(src, dst) przenosi (lub zmienia nazwę) pliku albo katalogu. Działa między różnymi systemami plików, w przypadku których os.rename zakończyłoby się niepowodzeniem.

import shutil, os

os.makedirs('/tmp/move_demo', exist_ok=True)
with open('/tmp/move_demo/old.txt', 'w') as f:
    f.write('move me')
shutil.move('/tmp/move_demo/old.txt', '/tmp/move_demo/new.txt')
print(os.path.exists('/tmp/move_demo/new.txt'))

Usuwanie drzewa katalogów

shutil.rmtree(path) usuwa katalog i całą jego zawartość. Należy używać tej funkcji ostrożnie — nie można cofnąć tej operacji.

import shutil, os

os.makedirs('/tmp/to_delete/inner', exist_ok=True)
shutil.rmtree('/tmp/to_delete')
print('exists after rmtree:', os.path.exists('/tmp/to_delete'))

ignore_errors i bezpieczeństwo

Przekazanie ignore_errors=True do rmtree zapobiega awarii, gdy ścieżka nie istnieje. Przydaje się to podczas czyszczenia przed świeżym uruchomieniem.

import shutil

shutil.rmtree('/tmp/never_existed', ignore_errors=True)
print('no error even though path was absent')

Tworzenie archiwum

shutil.make_archive(base_name, format, root_dir) pakuje katalog do pliku zip lub tar za pomocą jednego wywołania.

import shutil, os

os.makedirs('/tmp/arch_src', exist_ok=True)
with open('/tmp/arch_src/data.txt', 'w') as f:
    f.write('archive me')
path = shutil.make_archive('/tmp/my_archive', 'zip', '/tmp/arch_src')
print('created', os.path.basename(path))

Rozpakowywanie archiwum

shutil.unpack_archive(filename, extract_dir) wykonuje operację odwrotną, rozpakowując plik zip lub tar do folderu.

import shutil, os

shutil.make_archive('/tmp/box', 'zip', '/tmp/arch_src')
shutil.unpack_archive('/tmp/box.zip', '/tmp/unpacked')
print(os.listdir('/tmp/unpacked'))

Znajdowanie plików wykonywalnych

shutil.which(name) lokalizuje program w systemowej zmiennej PATH, podobnie jak powłokowe polecenie which. Zwraca pełną ścieżkę albo None.

import shutil

print(shutil.which('python3'))
print(shutil.which('definitely_not_a_real_program'))

Wykorzystanie miejsca na dysku

shutil.disk_usage(path) zwraca informacje o całkowitej, zajętej i wolnej liczbie bajtów w systemie plików zawierającym daną ścieżkę.

import shutil

usage = shutil.disk_usage('/')
print('total GB:', round(usage.total / 1e9, 1))
print('free GB:', round(usage.free / 1e9, 1))

Szybki sprawdzian

Sprawdź swoje zrozumienie modułu shutil.

Podsumowanie

Poznałeś moduł shutil do operacji na plikach:

  • copy/copy2 kopiuje pliki, a copytree kopiuje całe drzewa katalogów.
  • move zmienia nazwy lub przenosi elementy, a rmtree usuwa drzewa katalogów.
  • make_archive/unpack_archive obsługuje pliki zip i tar.
  • which i disk_usage pobierają informacje o systemie.

Następny kurs: tworzenie narzędzi wiersza poleceń za pomocą argparse.

Często zadawane pytania

Czy lekcja „shutil do operacji na plikach” jest bezpłatna?

Tak — pełny tekst „shutil do operacji na plikach” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Python Academy, przejdź na CoddyKit PRO. Kurs Python Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „shutil do operacji na plikach”?

Kopiuj, przenoś i archiwizuj pliki Ćwiczysz Python Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Python Academy?

Nie wymagamy żadnego doświadczenia. Python Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „shutil do operacji na plikach”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Python Academy?

Tak. Każda lekcja Python Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Uruchamianie poleceń za pomocą subprocess
  2. Przechwytywanie danych wyjściowych
  3. Środowisko i moduł os
  4. shutil do operacji na plikach
← Powrót do Python Academy