2016-08-26 3 views
0

Прошу прощения за такой базовый вопрос, но я пытаюсь изучить python и не понимаю, почему это не работает. Когда я запускаю эту программу в каталоге, она печатает и пустет список []. Я не понимаю, почему. Может кто-нибудь помочь? Python 3.python return пустой список из функции

import sys, os, 



def getfiles(currdir): 
    myfiles = [] 
    for file in os.listdir(currdir): 
     for file in os.listdir(currdir): 
      path = os.path.join(currdir,file) 
      if not os.path.isdir(path): 
       myfiles.append(path) 
      else: 
       getfiles(path) 
    return(myfiles) 




if __name__ == '__main__': 
    filedirectory = [] 
    filedirectory = getfiles(sys.argv[1]) 
    print(filedirectory) 

Это возвращает []

Спасибо за помощь

+0

Не могли бы вы добавить цель этого кода, пожалуйста? –

+1

Почему вы дублируете цикл "для файла в os.listdir (curdier):"? – takoika

+0

Возможно ли, что в 'currdir' нет файлов? Я бы предложил жесткое кодирование пути, который, как вы знаете, имеет некоторые файлы вместо использования 'sys.argv [1]' в качестве теста. – pbreach

ответ

0

Если я понимаю, что вы хотите получить все имена файлов в определенном каталоге. вот мой код для этого:

Import os 
AllFiles = [] 
AllFiles = os.listdir("your Directory") 

listdir() возвращает все имена файлов в определенном каталоге.

+0

Кажется, из кода, что OP пытается сделать рекурсивную версию файловой системы того, что вы только что написали (что-то вроде 'os.walk'). –

+0

Спасибо вам за ответы. Ты помог мне понять многое! – Eric

+0

Это наша работа! –

0

Ну, по крайней мере, один случай, когда ваша функция вернет пустой список, - это если самый верхний каталог содержит только каталоги. Вот ваш код (после удаления избыточного цикла):

for file in os.listdir(currdir): 
    path = os.path.join(currdir,file) 
    if not os.path.isdir(path): 
     myfiles.append(path) 
    else: 
     getfiles(path) 

Если else часть будет достигнута, то рекурсивный вызов getfiles(path). К сожалению, вы ничего не делаете с результатом, и на самом деле просто выбросите его. Вы, вероятно, имел в виду последнюю строку, чтобы быть что-то вроде

 myfiles.extend(getfiles(path)) 

Кроме того, вы можете проверить os.walk, как это делает то, что он, кажется, что вы пытаетесь сделать здесь.