CodeGym /Kursy /Python SELF PL /Praca z katalogami

Praca z katalogami

Python SELF PL
Poziom 21 , Lekcja 6
Dostępny

7.1 Podstawowe operacje

Nauczyłeś się pracować z plikami, teraz czas na katalogi. Czasem jest to podobne do pracy z plikami, czasem nie. Katalogi mają swoją specyfikę. Podstawowe funkcje do pracy z katalogami dostarczają moduły os i shutil.

Podstawowe operacje z katalogami:

Tworzenie katalogu

Do tworzenia nowego katalogu używa się funkcji os.mkdir().

Przykład:


import os

# Tworzenie nowego katalogu
os.mkdir('new_directory')
print("Katalog 'new_directory' został utworzony")

Tworzenie kilku zagnieżdżonych katalogów

Do tworzenia kilku zagnieżdżonych katalogów używa się funkcji os.makedirs().

Przykład:


import os

# Tworzenie kilku zagnieżdżonych katalogów
os.makedirs('parent_directory/child_directory')
print("Zagnieżdżone katalogi 'parent_directory/child_directory' zostały utworzone")

Usuwanie katalogu

Do usunięcia pustego katalogu używa się funkcji os.rmdir(). Do usunięcia katalogu z zawartością używa się funkcji shutil.rmtree().

Przykład:


import os

# Usuwanie pustego katalogu
os.rmdir('new_directory')
print("Katalog 'new_directory' został usunięty")

Przykład usunięcia katalogu z zawartością:


import shutil

# Usuwanie katalogu z zawartością
shutil.rmtree('parent_directory')
print("Katalog 'parent_directory' i jego zawartość zostały usunięte")

Ważne! Nigdy nie usuwaj katalogu z całą jego zawartością. W jednym na 10 przypadków program przemyci błąd i usuniesz sobie połowę plików na dysku. Wszyscy przez to przechodzą. Nigdy tego nie rób.

Zaleca się przed usunięciem katalogu sprawdzić jego obecność za pomocą funkcji os.path.exists(). To może zapobiec błędom związanym z usunięciem nieistniejącego katalogu lub niepoprawną ścieżką.

Przykład:


import os
import shutil

# Sprawdzenie obecności katalogu przed usunięciem
directory_path = 'parent_directory'
if os.path.exists(directory_path):
    shutil.rmtree(directory_path)
    print(f"Katalog '{directory_path}' i jego zawartość zostały usunięte")
else:
    print(f"Katalog '{directory_path}' nie istnieje, usunięcie niemożliwe")

7.2 Kopiowanie katalogów

Przenoszenie i zmiana nazwy katalogu

Do przenoszenia lub zmiany nazwy katalogu używa się funkcji os.rename().


import os

# Tworzenie katalogu do przykładu
os.mkdir('original_directory')

# Zmiana nazwy katalogu
os.rename('original_directory', 'renamed_directory')
print("Katalog 'original_directory' został przemianowany na 'renamed_directory'") 

Kopiowanie katalogu

Do kopiowania katalogu używa się funkcji shutil.copytree(). Funkcja ta nie tylko kopiuje zawartość katalogu, ale także tworzy nowy katalog w wskazanej ścieżce docelowej.


import os
import shutil

# Tworzenie katalogu do przykładu
os.mkdir('source_directory')

# Kopiowanie katalogu
shutil.copytree('source_directory', 'destination_directory')
print("Katalog 'source_directory' został skopiowany do 'destination_directory'")

7.3 Bieżący katalog

Każdy uruchomiony program ma takie pojęcie jak „bieżący katalog roboczy”. Zazwyczaj jest to katalog, w którym uruchomiono program i w którym szuka on swoich plików pomocniczych. Na przykład wszystkie pliki, których ścieżki są określone bez nazwy katalogu, będą szukane w bieżącym katalogu.

Uzyskiwanie bieżącego katalogu roboczego

Do uzyskania bieżącego katalogu roboczego używa się funkcji os.getcwd().


import os

# Uzyskiwanie bieżącego katalogu roboczego
current_directory = os.getcwd()
print(f"Bieżący katalog roboczy: {current_directory}")

Zmiana bieżącego katalogu roboczego

Do zmiany bieżącego katalogu roboczego używa się funkcji os.chdir().


import os

# Zmiana bieżącego katalogu roboczego
os.chdir('new_directory')
print(f"Bieżący katalog roboczy zmieniony na: {os.getcwd()}")

Zmiana bieżącego katalogu roboczego może wpłynąć na ścieżki do plików, które są określane względem bieżącego katalogu. Bądź uważny przy zmianie katalogu, ponieważ może to prowadzić do błędów, jeśli program oczekuje pliku w oryginalnym katalogu.

Sprawdzanie obecności katalogu

Do sprawdzania obecności katalogu używa się funkcji os.path.exists().


import os

# Sprawdzanie obecności katalogu
directory_path = 'new_directory'
if os.path.exists(directory_path):
    print(f"Katalog '{directory_path}' istnieje")
else:
    print(f"Katalog '{directory_path}' nie istnieje")

Uzyskiwanie absolutnej ścieżki katalogu

Do uzyskiwania absolutnej ścieżki używa się funkcji os.path.abspath().


import os

# Uzyskiwanie absolutnej ścieżki katalogu
relative_path = 'example_directory'
absolute_path = os.path.abspath(relative_path)
print(f"Absolutna ścieżka: {absolute_path}")

7.4 Zawartość katalogu

Uzyskiwanie listy plików i katalogów

Do uzyskania listy plików i katalogów w wskazanym katalogu używa się funkcji os.listdir().


import os

# Uzyskiwanie listy plików i katalogów w bieżącym katalogu
contents = os.listdir('.')
print(f"Zawartość bieżącego katalogu: {contents}")

Można pracować z plikami i katalogami nie tylko jako z listami ścieżek, ale jako z bardziej skomplikowanymi obiektami.

Uzyskiwanie informacji o zawartości katalogu z użyciem os.scandir()

Funkcja os.scandir() zwraca iterator, który wypluwa obiekty DirEntry dla każdego wpisu w katalogu. Te obiekty zawierają informacje o plikach i katalogach, co sprawia, że ich użycie jest bardziej efektywne w porównaniu z os.listdir(), szczególnie dla dużych katalogów.


import os

# Uzyskiwanie informacji o zawartości katalogu
with os.scandir('.') as entries:
    for entry in entries:
        print(f"Nazwa: {entry.name}, Czy to katalog: {entry.is_dir()}, Czy to plik: {entry.is_file()}")
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION