Muszę sprawdzić, czy plik o określonej nazwie istnieje w katalogu w Pythonie.

MÓJ KATALOG:

D:\mydirectory\img\

Używam python-decouple, aby przekazać ścieżkę do mojego katalogu w „.venv”

os.path.exists(config('PATH_IMG'))

Potrzebuję sposobu, aby sprawdzić, czy plik „photo.jpg” znajduje się w „PATH_IMG”.

Próbowałem użyć os lib, ale w oficjalnej dokumentacji nie pokazuję, jak to zrobić.

Inne, niektóre sposoby rozwiązania tego problemu wymagają użycia pętli, aby wzmocnić złożoność kodu, na przykład użycie pętli for.

Jak mogę to zrobić?

-4
Eric Gomes 2 kwiecień 2020, 19:48

3 odpowiedzi

Najlepsza odpowiedź

Skonstruuj ścieżkę do pliku i użyj {{X0} }, aby sprawdzić, czy plik istnieje.

imagefile = os.path.join(config('PATH_IMG'), 'photo.jpg')
print(os.path.isfile(imagefile))
0
Matthias 2 kwiecień 2020, 17:11

Możesz użyć funkcji os.listdir, zwraca ona listę plików w katalogu, więc:

if "photo.jpg" in os.listdir(directory):
  return True

Jest też funkcja:

os.path.exists(directory + "/" + "photo.jpg")

Która zwraca bezpośrednio, jeśli plik istnieje

0
Alessandro_Tonali 2 kwiecień 2020, 17:08

Myślę, że próbujesz dowiedzieć się, czy plik istnieje w katalogu.

To może ci pomóc:

import os
directory = <your_path>

for r, d, f in os.walk(directory):
   for file in f:
      if file == "photo.jpg":
         print("Found it!")

Os.walk zwraca 3 zmienne, katalog główny, nazwę_katalogu i nazwy plików.

Nazwy plików znajdują się na liście, więc:

Dla każdej wartości na liście,

Jeśli ta wartość == to, czego szukasz

Print znalazł to.

EDYCJA: Nie bardzo wiem dlaczego, ale wydaje się, że nie chcesz pętli for w swoim głównym kodzie.

Zrób to:

def findfile(directory, filename):
   for r, d, f in os.walk(directory):
      for file in f:
         if file == filename:
             print("Found it!")

findfile(directory, "photo.jpg")

Teraz możesz po prostu wywołać funkcję w dowolnym momencie, co powinno „zmniejszyć” złożoność kodu .

0
Ariel A 2 kwiecień 2020, 17:13