2016-08-26 16 views
0

このような基本的な質問は申し訳ありませんが、私はPythonを学ぼうとしていますが、なぜこれが機能しないのか理解できません。このプログラムをディレクトリ上で実行すると、それは印刷され、空のリスト[]が表示されます。なぜか分からない。助けてもらえますか?私はあなたが特定のディレクトリ内のファイル名のすべてを取得したい理解していればPythonの3Pythonは関数から空のリストを返します

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

あなたの関数が空のリストを返す少なくとも1つのケースは、最上位のディレクトリにディレクトリのみが含まれている場合です。ここにあなたのコードは、(冗長ループを取り除いた後)です:

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)を呼び出します。残念なことに、あなたは結果を何もせず、実際にそれを放棄します。おそらく、それはあなたがここでやろうとしていると思われるものを同じようにまた、あなたは、os.walkをチェックアウトする場合があります


 myfiles.extend(getfiles(path)) 

のようなものにするために、最後の行を意味しました。

関連する問題