Рекурсивная функция 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)

Другие вопросы по тегам