Nie istnieje katalog, w którym chcemy utworzyć nowy folder

Problem: Brak katalogu nadrzędnego w którym chcemy utworzyć nowy folder

Aby wywołać ten błąd minimalnie zmodyfkujemy skrypt create_dir.py. Zmieńmy ścieżkę do pliku na taką, która nie istnieje (precyzyjniej: zawiera nieistniejący katalog invalid):

‘testFiles\invalid\newTestFiles’

import os

dir_full_path = os.path.join("testFiles", "invalid", "newTestFiles")
print(f'New directory will be created in: "{os.getcwd()}"')
print(f'New directory path: "{dir_full_path}"')

os.mkdir(dir_full_path)

Po uruchomieniu powyższego skryptu otrzymamy następujący wynik:

New directory will be created in: "C:\Projects\pythonFiles"
New directory path: "testFiles\invalid\newTestFiles"
Traceback (most recent call last):
  File "C:/Projects/pythonFiles/create_dir.py", line 6, in module
    os.mkdir(dir_full_path)
FileNotFoundError: [WinError 3] The system cannot find the path specified: 'testFiles\\invalid\\newTestFiles'

Process finished with exit code 1

Z powyższego błędu bardzo łatwo wyczytać jaki problem wystąpił: FileNotFoundError. Jest też wskazanie jaki plik (katalog) nie został znaleziony: The system cannot find the path specified: ‘testFiles\\invalid\\newTestFiles’.

Zapamiętaj: Za pomocą polecenia os.mkdir() tworzymy pojedynczy katalog w istniejącej strukturze. Ta funkcja nie stworzy automatycznie brakujących katalogów nadrzędnych.

Rozwiązania problemu

Gdy nie jestesmy pewni czy istnieje cała struktura katalogów możemy zdecydować się na jej utworzenie. Wykonamy to bardzo prosto za pomocą użycia funkcji
os.makedirs()
.

import os

dir_full_path = os.path.join("testFiles", "invalid", "newTestFiles")
print(f'New directory will be created in: "{os.getcwd()}"')
print(f'New directory path: "{dir_full_path}"')

os.makedirs(dir_full_path)

Powyższy skrypt spowoduje stworzenie wszystkich nieistniejących katalogów ze wskazanej ścieżki.

Po uruchomieniu tego przykładu zobaczysz utworzony nieistniejący nadrzędny katalog invalid.

Oczywiście kolejne uruchomienie tej funkcji spowoduje znany problem z już istniejącym katalogiem

Na szczęście używając funkcji makedirs() nie musimy dodawać zabezpieczenia z if not os.path.exists:

import os

dir_full_path = os.path.join("testFiles", "invalid", "newTestFiles")

if not os.path.exists(dir_full_path):
   os.makedirs(dir_full_path)
else:
   print("Directories already exists")

Wystarczy ustawienie parametru exist_ok=True w funkcji makedirs():

os.makedirs(dir_full_path, exist_ok=True)

To sprawi, że żaden błąd nie wystąpi podczas próby stworzenia istniejącego katalogu.

Przetestuj kod z nowym parametrem…

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *