2016-10-07 4 views
3

누구든지 pathlib 라이브러리를 사용하여 특정 디렉토리 아래에 모든 파일을 나열하는 함수를 만들 수 있습니까? \ 바탕 화면 \ 테스트 \ v \ a.txt이디렉토리에있는 모든 파일을 나열하는 Python

  • C : \ 바탕 화면 \ 테스트 여기

    , 나는 내가 가지고있는

    enter image description here

    • C가 \ B \ B_1 \ B.txt

    • c : \ desktop \ test \ 123.txt

    위의 경로가있는 단일 목록이 있어야하지만 내 코드는 중첩 목록을 반환합니다.

    def searching_all_files(directory: Path): 
        file_list = [] # A list for storing files existing in directories 
    
        for x in directory.iterdir(): 
         if x.is_file(): 
    
          file_list.append(x) 
         else: 
    
          file_list.append(searching_all_files(directory/x)) 
    
        return file_list 
    
    
    p = Path('C:\\Users\\akrio\\Desktop\\Test') 
    
    print(searching_all_files(p)) 
    

    희망의 사람이 저를 정정 할 수 pathlib 수입 경로에서 :

    여기 내 코드입니다. 고마워요

  • +1

    두 번째 경우에는'append' 대신'extend'를 사용 하시겠습니까? – Julien

    +0

    list.extend()가 작동하지 않는 것 같습니다. – Akrios

    +0

    무엇이 작동하지 않습니까? 제발 좀 더 자세한 내용을주십시오. – Julien

    답변

    0
    def searching_all_files(directory: Path): 
        file_list = [] # A list for storing files existing in directories 
    
        for x in directory.iterdir(): 
         if x.is_file(): 
          file_list.append(x)#here should be appended 
         else: 
          file_list.extend(searching_all_files(directory/x))# need to be extended 
    
        return file_list 
    
    2

    os.listdir()을 사용할 수 있습니다. 디렉토리에있는 모든 것을 파일과 디렉토리로 가져옵니다.

    그냥 파일을 원하는 경우에, 당신이 아래로 사용을 os.path 필터링 할 수 있습니다 중 하나

    from os import listdir 
    from os.path import isfile, join 
    onlyfiles = [files for files in listdir(mypath) if isfile(join(mypath, files))] 
    

    또는 당신은 방문하는 각 디렉토리에 대한 두 개의 목록을 얻을 것이다) (os.walk 사용할 수 있습니다 - 분할로 파일 및 디렉토리. 당신은 단지 최상위 디렉토리를 원하는 경우에 당신은 처음으로 그것이 모든 파일과 디렉토리를 나열하는

    from os import walk 
    files = [] 
    for (dirpath, dirnames, filenames) in walk(mypath): 
        files.extend(filenames) 
        break 
    
    +0

    요구 사항은 pathlib를 사용하는 것입니다. 어쨌든 고마워. – Akrios

    3
    from pathlib import Path 
    from pprint import pprint 
    
    def searching_all_files(directory): 
        dirpath = Path(directory) 
        assert(dirpath.is_dir()) 
        file_list = [] 
        for x in dirpath.iterdir(): 
         if x.is_file(): 
          file_list.append(x) 
         elif x.is_dir(): 
          file_list.extend(searching_all_files(x)) 
        return file_list 
    
    pprint(searching_all_files('.')) 
    
    5

    사용 글로브를 산출 깰 수 있습니다. 그런 다음 필터링하십시오.

    p = Path('C:\\Users\\akrio\\Desktop\\Test').glob('**/*') 
    files = [x for x in p if x.is_file()] 
    
    관련 문제