2017-06-20 19 views
1

関数を定義してos.walkを使用しようとすると、出力はディレクトリの最初のファイルにすぎません。Cドライブにあるすべてのファイルを出力します。Python定義関数が最初のdirを出力する

#os.chdir=("..") 
def dirslist(): 
for root, dirs, files in os.walk("c://", topdown=False): 
    for name in files: 
    return(os.path.join(root, name)) 
    for name in dirs: 
    return(os.path.join(root, name)) 

print(dirslist()) 
+2

機能が終了した後は、一度「返品」することができます。 – jonrsharpe

+0

すべてのforループの後に配列を返しますか? – jmunsch

答えて

2

returnは、最初の反復自体で返します。あなたが望むのは、すべての反復からパスを取得することです。 1つの方法はreturnyieldに変更することです。今すぐdirslistはジェネレータ関数になり、あなたのパスを1つずつ返します。あなたは、発電機の人いないのであれば

def dirslist(): 
    for root, dirs, files in os.walk("c://", topdown=False): 
     for name in files: 
      yield(os.path.join(root, name)) 
     for name in dirs: 
      yield(os.path.join(root, name)) 


print(list(dirslist())) 

別のアプローチは、リストにあなたのパスを蓄積し、代わりにそれを返すことです。

def dirslist(): 
    paths = [] 
    for root, dirs, files in os.walk("c://", topdown=False): 
     for name in files: 
      paths.append(os.path.join(root, name)) 
     for name in dirs: 
      paths.append(os.path.join(root, name)) 

    return paths 

print(dirslist()) 

ここで注意すべき主なものは、一度だけの機能からreturn戻り、各反復でしばらくyield戻ると、直前の繰り返しの後から、それが呼び出されるたびに再開するということです。

+0

これはnoobの質問かもしれませんが、ここで新しい行(\ n)のすべてのファイルを出力しますか? –

+0

@ ShantanuGhare:大丈夫です。 'l = list(dirslist());を実行できます。 lのxの場合:print(x) '。 forループを使用し、リストを反復処理します。 –

+0

ありがとう!これは本当に私を助けました! –

0

return文を使用すると、自動的に関数が終了します。あなたがリターンを使うつもりなら、あなたのコードがそこで終わっていることを知ってください。それをすべて印刷したい場合は、すべての文字列を連結してから、一度にすべての文字列を最後に返します。

4
def dirslist(): 

answer = [] 
for root, dirs, files in os.walk("c://", topdown=False): 
    for name in files: 
    answer.append(os.path.join(root, name)) 

    for name in dirs: 
    answer.append(os.path.join(root, name)) 

return answer 

print(dirslist()) 
1

すべてを印刷する場合は、Cドライブにあります。 返品の代わりにプリントを使用

関連する問題