2012-10-30 2 views
1

단일 폴더를보고 파일을 추출하는 코드가 있습니다. 하지만 이제는 폴더 구조가 변경되었고 일치하는 파일을 찾는 폴더를 통과해야합니다.os.walk는 폴더 구조를 크롤링합니다.

이전 코드는

GSB_FOLDER = r'D:\Games\Gratuitous Space Battles Beta' 

def get_module_data(): 
    module_folder = os.path.join(GSB_FOLDER, 'data', 'modules') 

    filenames = [os.path.join(module_folder, f) for f in 
        os.listdir(module_folder)] 

    data = [parse_file(f) for f in filenames] 

    return data 

처럼 보인다하지만 지금은 폴더 구조는

  • GSB_FOLDER \ 데이터 \ 모듈
    • \ 폴더 1 \ 데이터 \ 모듈
    • 처럼되고 변경된 내용
    • \ folder2 \ data \ modules
    • \ folder3 \ data \ modules

곳 folder1,2 또는 3, 내가이 일을 위의 코드를 다시 작성 어떻게 ... 가 나는 os.walk에 대해 말씀 드리 지요

텍스트 문자열을 수 있지만 ' 그냥 파이썬을 배우고 ... 그래서 어떤 도움을 주신

+1

그 게임 – will

답변

2

아무 것도 많이 변경하지 않고 그냥 os.walk이라고 부르면 디렉토리를 통해 재귀 적으로 파일을 반환합니다.

for root, dirs, files in os.walk('/tmp'): 
    if os.path.basename(root) != 'modules': 
     continue 
    data = [parse_file(os.path.join(root,f)) for f in files] 

여기 'modules'라는 폴더의 파일 만 검사합니다.이 체크는 다른 작업을 수행하도록 변경할 수 있습니다. 모듈이 경로는 어디 root.find('/modules') >= 0

+0

을 사랑하는 방법은에 있는가 모듈이라는 폴더를 포함하십시오. –

+0

@MatGritt 변경 사항을 참조하십시오. 루트 경로를 기반으로 필터링을 수행 할 수 있습니다. –

+0

Sweet 감사합니다. –

0

당신은 @Anurag 같은 os.walk는 설명했다 사용하거나 내 작은 pathfinder 라이브러리를 시도 할 수 있습니다 :

data = [parse_file(f) for f in pathfinder.find(GSB_FOLDER), just_files=True] 
0

os.walk 모든 것을의 디렉토리 구조를 얻을 수있는 좋은 쉬운 방법입니다 당신은 그것을 전달하는 dir 안에 있습니다; 귀하의 예제에서

, 당신은 이런 식으로 뭔가를 할 수 :

for dirpath, dirnames, filenames in os.walk("...GSB_FOLDER"): 
    #whatever you want to do with these folders 
    if "/data/modules/" in dirpath: 
    print dirpath, dirnames, filenames 

을 상당히 자기가 어떻게 작동하는지 설명적인해야한다, 그 밖으로 시도 ...

관련 문제