Katalog, który chcemy utworzyć, już istnieje
Problem: Istnieje już katalog, który chcemy utworzyć
To będzie bardzo prosty test. Uruchom nasz skrypt ponownie (bez usuwania już utworzonego katalogu newTestFiles). Oto co dostaniemy w konsoli:
New directory will be created in: "C:\Projects\pythonFiles" New directory path: "testFiles\newTestFiles" Traceback (most recent call last): File "C:/Projects/pythonFiles/create_dir.py", line 7, in <module&;gt; os.mkdir(dir_full_path) FileExistsError: [WinError 183] Cannot create a file when that file already exists: 'testFiles\\newTestFiles' Process finished with exit code 1
Ostatnia linia z opisem błędu, dodatkowo zestawiona z wypisywanymi informacjami od razu pozwala nam stwierdzić, gdzie i jaki katalog już istnieje:
New directory will be created in: "C:\Projects\pythonFiles" New directory path: "testFiles\newTestFiles" FileExistsError: [WinError 183] Cannot create a file when that file already exists: 'testFiles\\newTestFiles'
Rozwiązanie
Gdy chcemy zabezpieczyć się przed problemem z potencjalnie istniejącym katalogiem, możemy użyć funkcji os.path.exists
.
Funkcja ta zwraca wartość True
w przypadku, gdy katalog istnieje, oraz False
w przeciwnym wypadku. Gdybyśmy chcieli zastosować ją w powyższym przypadku, to nasz kod przyjąłby postać:
import os dir_full_path = os.path.join("testFiles","newTestFiles") print(f'New directory will be created in: "{os.getcwd()}"') print(f'New directory path: "{dir_full_path}"') if not os.path.exists(dir_full_path): os.mkdir(dir_full_path)
if not
. Dzięki niej instrukcja w ciele if
wykona się gdy warunek nie będzie spełniony.
W tym przypadku pytamy os.path.exists
: czy ścieżka istnieje. Jeśli os.path.exists(dir_full_path)
odpowie negatywnie (False
) to jest to sygnał do akceptacji warunku if not
.
Taka konstrukcja:
if not os.path.exists(dir_full_path)
Jest równoważna z:
if os.path.exists(dir_full_path)==False
Sprawdź teraz czy wielokrotne uruchomienie skryptu nadal zwraca błąd 😉