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 😉
