W Pythonie chcę tylko wyświetlić listę wszystkich plików w bieżącym katalogu. Nie chcę, aby pliki były wymienione z dowolnego podkatalogu lub nadrzędnego.
Wydaje się, że istnieją podobne rozwiązania, ale wydaje się, że nie działają one dla mnie. Oto mój fragment kodu:
import os
for subdir, dirs, files in os.walk('./'):
for file in files:
do some stuff
print file
Załóżmy, że mam 2 pliki, holygrail.py i Tim w moim bieżącym katalogu. Mam również folder, który zawiera dwa pliki - nazwijmy je Arthur i Lancelot - wewnątrz niego. Po uruchomieniu skryptu otrzymuję:
holygrail.py
Tim
Arthur
Lancelot
Cieszę się z holygrail.py i Tim. Ale dwa akta, Arthur i Lancelot, nie chcę na liście.
[os.path.join(path_base,f) for f in os.listdir(path_base) if os.path.isfile(os.path.join(path_base,f))]
files = [f for f in os.listdir("/somedir") if os.path.isfile(os.path.join("/somedir", f))]'
Możesz użyć
os.listdir
do tego celu. Jeśli chcesz tylko pliki, a nie katalogi , możesz filtrować wyniki za pomocąos.path.isfile
.przykład:
lub
źródło
źródło
Możesz użyć
os.scandir()
. Nowa funkcja w stdlib zaczyna się od Python 3.5.Szybciej niż
os.listdir()
.os.walk()
wdrażaos.scandir()
.źródło
można to zrobić za pomocą os.walk ()
przetestowano Python 3.5.2;
usuń wiersz dirs.clear (), a pliki w podfolderach zostaną ponownie uwzględnione.
aktualizacja z referencjami ;
dokumentacja os.walk tutaj i mówi o tworzeniu potrójnej listy i efektach topdown.
.clear () udokumentowano tutaj, aby opróżnić listę
usuwając odpowiednią listę z os.walk, możesz dostosować jej wynik do swoich potrzeb.
źródło
Możesz ulepszyć ten kod, dzięki
del dirs[:]
czemu będzie to wyglądało następująco.Lub jeszcze lepiej, jeśli możesz wskazać os.walk za pomocą bieżącego katalogu roboczego.
źródło
zamiast po
os.walk
prostu użyjos.listdir
źródło
Możesz użyć modułu pathlib.
źródło