2013-10-13 3 views
1

Я пытаюсь перечислить все файлы в текущей папке, а также файлы в папках текущей папки. Это то, что я был ДО:Если путь является файлом или каталогом (Python)

import os 


def sendFnF(dirList): 
     for file in dirList: 

       if os.path.isdir(file): 
         print 'Going in dir:',file 
         dirList1= os.listdir('./'+file) 
#      print 'files in list', dirList1 
         sendFnF(dirList1) 
         print 'backToPrevDirectory:' 

       else: 
         print 'file name is',file 




filename= raw_input() 
dirList= os.listdir('./'+filename) 
sendFnF(dirList) 

Этот код делает получить меня в папках текущей директории. Но когда дело доходит до подпапок; он рассматривает их как файлы. Любая идея, что я делаю неправильно? Заранее спасибо, Sarge.

+0

Вы спуском в '»./"+ file", но вы никогда не меняете * текущий * каталог. (Используя, скажем, 'os.chdir()'). Вы ищете подкаталоги только в каталоге, где была запущена программа. – millimoose

+0

Да, вы были правы! Благодаря! –

ответ

1

Превращение ./ в путь практически не имеет значения. Кроме того, только потому, что вы вызываете функцию рекурсивно с помощью пути каталога, не меняет текущий каталог и, следовательно, значение . в пути к файлу.

Ваш базовый подход прав, чтобы спуститься по каталогу os.path.join(). Было бы лучше, чтобы перестроить свой код, чтобы вы listdir() в начале sendFnF():

def sendFnF(directory): 
    for fname in os.listdir(directory): 
     # Add the current directory to the filename 
     fpath = os.path.join(directory, fname) 

     # You need to check the full path, not just the filename 
     if os.path.isdir(fpath): 
      sendFnF(fpath) 
     else: 
      # ... 

# ... 
sendFnf(filename) 

Тем не менее, если это не упражнение, вы можете просто использовать os.walk()

+0

Спасибо за помощь! Но мне удалось заставить мой код работать, перейдя по этим строкам: prev = os.getcwd(); os.chdir (файл) // Рекурсивный вызов И затем: os.chdir (prev); // Возвращаясь к исходному каталогу после вызова функции –

+0

@UsmanKhan Это также работает, конечно, я просто предпочитаю не зацикливаться на «скрытом» состоянии процесса. (По какой-то конкретной причине.) – millimoose

Смежные вопросы