2016-07-12 7 views
0

私はpythonについて全く新しいです。だからここに私の問題です。関数のpythonから完全なリストを取得する方法

def visitdir(path): 
    result = [] 
    for root,dirs,files in os.walk(path): 
     for filepath in files: 
      result = ''.join(os.path.join(root,filepath)) 
      print result    
if __name__ == '__main__': 
    path = raw_input("Please input the folder you want to walk:") 
    visitdir(path) 

私は歩きたいフォルダを入力している間、完全なリストを表示します。私は以下のようにそれを変更した場合 しかし:

import os, sys 
def visitdir(path): 
    result = [] 
    for root,dirs,files in os.walk(path): 
     for filepath in files: 
      result = ''.join(os.path.join(root,filepath)) 
      return result    
if __name__ == '__main__': 
    path = raw_input("Please input the folder you want to walk:") 
    final = visitdir(path) 
    print final 

それだけで選択したパスから一つの項目を提供します。私が以前のものと同じ結果を出したいだけなら、どうすれば関数を呼び出すことができますか?

ありがとうございます。

+2

2番目のforループの最初の繰り返しで戻ってくるためです。おそらく、あなたはあなたの結果リストに追加して、あなたが望む出力を得るためにあなたのリストのデータを処理したいでしょう。 –

答えて

0

returnは、指定された関数の実行を終了します。

これを実行する最も簡単な方法の1つは、yield値になり、関数からジェネレータを作成することです。

def visitdir(path): 
    for root,dirs,files in os.walk(path): 
     for filepath in files: 
      result = ''.join(os.path.join(root,filepath)) 
      yield result 

if __name__ == '__main__': 
    path = raw_input("Please input the folder you want to walk:") 
    print list(visitdir(path)) 
    # or 
    for p in visitdir(path): 
     print p 

また、すべての中間結果をリストに格納し、前記リストを返すこともできます。

def visitdir(path): 
    results = [] 
    for root,dirs,files in os.walk(path): 
     for filepath in files: 
      result = ''.join(os.path.join(root,filepath)) 
      results.append(result)    
    return results 

if __name__ == '__main__': 
    path = raw_input("Please input the folder you want to walk:") 
    print visitdir(path) 
    # or 
    for p in visitdir(path): 
     print p 
+0

ありがとう、それは私が欲しいものを返す。非常に便利。 – maburycn

0

returnを呼び出すと、関数フローが終了し、値が返されます。 なぜリスト '結果'を作成し、それを文字列で上書きするのですか?

私はあなたがする何を意味するかと思いますが、このようなものです:

def visitdir(path): 
    result = [] 
    for root,dirs,files in os.walk(path): 
     for filepath in files: 
      filename = ''.join(os.path.join(root,filepath)) 
      result.append(filename) 
    return result 

例えば、結果のリストをいっぱいにし、最後にそれを返します。

もう1つのことは、yieldを使用することです。

0

作成した結果リストに結果を追加する必要があります。

def visitdir(path): 
    result = [] 
    for root,dirs,files in os.walk(path): 
     for filepath in files: 
      result.append(''.join(os.path.join(root,filepath))) 
    return result 
if __name__ == '__main__': 
    path = raw_input("Please input the folder you want to walk:") 
    visitdir(path) 
関連する問題