Czy istnieje sposób na wylistowanie plików (nie katalogów) w katalogu z Pythonem? Wiem, że mógłbym użyć os.listdir
i pętli os.path.isfile()
s, ale jeśli jest coś prostszego (jak funkcja os.path.listfilesindir
lub coś podobnego), prawdopodobnie byłoby lepiej.Lista tylko plików w katalogu?
Odpowiedz
To a simple generator expression:
files = (file for file in os.listdir(path)
if os.path.isfile(os.path.join(path, file)))
for file in files: # You could shorten this to one line, but it runs on a bit.
...
Albo można zrobić funkcję generatora, jeżeli nadaje się wam lepiej:
def files(path):
for file in os.listdir(path):
if os.path.isfile(os.path.join(path, file)):
yield file
Następnie wystarczy:
for file in files(path):
...
Dlaczego dostałem skargę w tej sprawie? –
zapomniałeś dodać łączenie między dirname i nazwą pliku – ayvango
@ayvango To tylko inne zachowanie - nie było potrzeby, aby podać pełną ścieżkę w pytaniu, a to działa tak, jak jest w dobrze zdefiniowany sposób. –
można spróbować pathlib, który ma również wiele innych użytecznych rzeczy.
Pathlib to obiektowa biblioteka do interakcji ze ścieżkami systemu plików. Aby pobrać pliki w bieżącym katalogu, można zrobić:
from pathlib import *
files = (x for x in Path(".") if x.is_file())
for file in files:
print(str(file), "is a file!")
To jest, moim zdaniem, bardziej pythonowy niż przy użyciu os.path
.
Zobacz również: PEP 428.
Jedną z powszechnych rad jest unikanie tego rodzaju importu. To znaczy, po prostu importuj to, czego używasz, co w twoim przypadku byłoby po prostu 'from pathlib import Path'. – Tshepang
Chociaż 'pathlib' jest świetny, argumentowałbym, że zależy to od skryptu pod ręką - jeśli tylko kilka razy zajmuje się plikami, w zależności od' pathlib' może to być przesada. –
Korzystanie pathlib w Windows następująco:
files = (x for x in Path("your_path") if x.is_file())
Generuje błąd:
TypeError: 'WindowsPath' object is not iterable
Należy raczej używać Path.iterdir()
filePath = Path("your_path")
if filePath.is_dir():
files = list(x for x in filePath.iterdir() if x.is_file())
files = next(os.walk('..'))[2]
Korzystanie pathlib
, najkrótsza droga t o Lista plików to:
[x for x in Path("your_path").iterdir() if x.is_file()]
z obsługą głębokości w razie potrzeby.
- 1. Lista tylko numerycznych nazw plików w katalogu
- 2. Lista plików w katalogu bieżącego pliku JAR
- 3. Lista wszystkich plików w jednym katalogu PHP
- 4. Lista plików w katalogu przy użyciu html
- 5. lista PHP określonych plików w katalogu
- 6. Pliki wsadowe: Lista wszystkich plików w katalogu o ścieżkach względnych
- 7. Lista tylko niektórych plików w katalogu odpowiadającym wyrazowi BOZO i kończąc na '123' lub '456'
- 8. Lista wszystkich folderów w katalogu
- 9. Lista w katalogu (Model) Factory
- 10. Lista zawartości katalogu (php)
- 11. lista PHP wszystkie pliki w katalogu
- 12. Lista wszystkich plików z internetowego katalogu FTP do listy C#
- 13. Jak uzyskać tylko nazwy plików w katalogu przy użyciu C#?
- 14. Jak odczytywać atrybuty plików w katalogu?
- 15. Skopiuj listę plików do katalogu
- 16. Znajdź liczbę plików w katalogu
- 17. Określanie liczby plików w katalogu
- 18. Regex dla plików w katalogu
- 19. ładowanie nowych plików w katalogu
- 20. Lista plików w R, które NIE pasują do wzorca
- 21. Lista rozwijana RadComboBox TYLKO
- 22. Przenoszenie plików do katalogu
- 23. ogonopodobne ciągłe ls (lista plików)
- 24. .gitignore Biała lista w katalogu i jej zawartości
- 25. Wyraźna lista typów plików w Powershell
- 26. Ignorowanie plików w katalogu projektu Meteor JS
- 27. Usuwanie tylko moich plików w systemie Unix
- 28. liczba Liczba plików w katalogu w PHP
- 29. Lista plików rekursywnie w Linux CLI ze ścieżką względem bieżącego katalogu
- 30. Lista ciągów tylko do odczytu
[powiązane] (http://stackoverflow.com/q/6664205) – Tshepang