О вашем коде:
Ваша рекурсия не принимает level
в качестве аргумента, поэтому вы увеличиваете ее без результатов (как видно из вашего вывода). [Говоря о '---'
, '-----'
incremental]
Здесь я немного переработал ваш код:
def tree(path='.', level=1):
#print(path)
#level=1
separator = "----" * level
#print("Scanning files in " + path)
#print(f"content: {os.listdir(path)}")
for each_item in os.listdir(path):
#print('Checking item ',each_item)
if os.path.isfile(path+f'/{each_item}'):
#print("file found! It's called " + each_item)
print(separator + each_item)
pass
elif os.path.isdir(path+f'/{each_item}'):
#print("directory found! It's called " + each_item)
print(separator + each_item)
level+=1
#print(f"Entering directory...{each_item}")
tree(path+f'/{each_item}', level)
else:
print(f"{each_item} is corrupted or of an unknown format.")
tree()
Прокомментировал большинство отпечатков из функции, оставив вывод:
----Folder
------------example.py
------------NewDirectory
----------------samplefile.txt
----------------folder
--------------------root.txt
------------NewDirectory - Shortcut.lnk
----initial.py
Проверьте онлайн-компилятор.
Одна заметка о рекурсии со значениями по умолчанию (значение по умолчанию def function (argument=10)
), вы должны проверить эту статью .
На секунду обратите внимание, относительно fnmatch
и glob
(а не os.walk
из заголовка).
Для определенной структуры, как ваша, вы можете использовать fnmatch
, чтобы найти файлы с python (py) как расширение (python файлов). Или тексты (txt) и т. Д.:
for file in os.listdir('.'):
if fnmatch.fnmatch(file, '*.py'):
print(file)
Создан базовый c пример этого дубля внутри ссылки компилятора (проверьте файл main2.py
).
На третьем замечании , проверьте эту константу Path из библиотеки pathlib :
from pathlib import Path
for path in Path('.').rglob('*'):
print(path.name)