2016-07-12 2 views
0

저는 파이썬에 관해 완전히 새로운 것 같습니다. 그래서 여기에 내 문제가있다.함수 파이썬에서 전체 목록을 얻는 방법

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

두 번째 for-loop의 첫 번째 반복에서 반환되기 때문에. 결과 목록에 추가 한 다음 목록의 데이터를 처리하여 원하는 출력을 얻는 것이 좋습니다. –

답변

0

return은 주어진 기능의 실행을 종료합니다.

가장 쉬운 방법 중 하나는 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 

예 : 결과 목록을 작성하고 마지막에 반환.

또 다른 할 일은 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) 
관련 문제