Рекурсивная функция Python с использованием os.listdir()
Я пытаюсь создать рекурсивную функцию с помощью os.listdir(), и у меня есть циклический цикл для всех моих каталогов и список всех файлов и каталогов.
Я знаю, что лучше использовать os.tree() для решения такого рода проблем, но я хочу посмотреть, как решить эту проблему с помощью os.listdir(). Вот мой текущий код:
#!/bin/usr/py
from os.path import abspath
from os.path import isfile, isdir
import os
import sys
dir = sys.argv[1]
def recursive(dir):
files = os.listdir(dir)
for obj in files:
if isfile(obj):
print obj
elif isdir(obj):
print obj
recursive(abspath(obj))
#no idea why this won't work???
recursive(dir)
1 ответ
Ваша проблема исходит от abspath(obj)
попробуйте заменить его на os.path.join(dir, obj)
иметь реальный путь к твоему объекту (я проверил его на моем env)
Спасибо, Габриэль и Эмилрн! это было именно то, что я искал, чтобы рекурсивно получить список файлов из родительского каталога, предусмотренного для одного из моих проектов. Просто оставьте обновленный код здесь для тех, кому он понадобится позже.
#! / bin / usr / pyimport osimport sys
dir = sys.argv[1]
def рекурсивный (dir): files = os.listdir(dir) для obj в файлах:
if os.path.isfile(os.path.join(dir,obj)):
print ("File : "+os.path.join(dir,obj))
elif os.path.isdir(os.path.join(dir,obj)):
recursive(os.path.join(dir, obj))
else:
print ('Not a directory or file %s' % (os.path.join(dir, obj))
рекурсивный (dir)