Poszukuję sposobu na zrobienie nierekurencyjnego spaceru os.walk()
, podobnie jak w przypadku prac os.listdir()
. Ale muszę powrócić w taki sam sposób, jak zwraca os.walk()
. Dowolny pomysł?Nierekurencyjne os.walk()
Z góry dziękuję.
Poszukuję sposobu na zrobienie nierekurencyjnego spaceru os.walk()
, podobnie jak w przypadku prac os.listdir()
. Ale muszę powrócić w taki sam sposób, jak zwraca os.walk()
. Dowolny pomysł?Nierekurencyjne os.walk()
Z góry dziękuję.
next(os.walk(...))
My nieco bardziej sparametryzowane rozwiązaniem byłoby to:
for root, dirs, files in os.walk(path):
if not recursive:
while len(dirs) > 0:
dirs.pop()
//some fency code here using generated list
EDIT: poprawki, jeśli/gdy problem. Dzięki, @Dirk van Oosterbosch:}
Działa to tylko wtedy, gdy istnieje ** jeden ** podkatalog. W przypadku wielu podkatalogów użyj 'while len (dirs)> 0' zamiast' if'. –
@DirkvanOosterbosch: lub jeszcze prostsze: po prostu 'jeśli nie rekurencyjne: break' Niepowiązane: możesz użyć' del dirs [:] 'zamiast' while dirs: dirs.pop() '. – jfs
Użycie 'dirs.clear()' jest bardziej idiomatyczne. – ideasman42
No co Kamiccolo oznaczało był bardziej zgodny z tym:
for str_dirname, lst_subdirs, lst_files in os.walk(str_path):
if not bol_recursive:
while len(lst_subdirs) > 0:
lst_subdirs.pop()
Dodaj break
po nazwach pętli for:
for root, dirs, filenames in os.walk(workdir):
for fileName in filenames:
print (fileName)
break #prevent decending into subfolders
To działa, ponieważ (domyślnie) os.walk
najpierw wyświetla pliki w żądanym folderze, a następnie przechodzi do podfolderów.
Bardziej proste niż mogłoby się wydawać ... Dziękuję! –