복붙노트

[PYTHON] 모든 하위 디렉토리를 포함하여 디렉토리에서 파일을 얻는 방법

PYTHON

모든 하위 디렉토리를 포함하여 디렉토리에서 파일을 얻는 방법

모든 하위 디렉터리를 포함하여 디렉터리의 모든 로그 파일 (.log) 목록을 가져 오려고합니다.

해결법

  1. ==============================

    1.

    import os
    import os.path
    
    for dirpath, dirnames, filenames in os.walk("."):
        for filename in [f for f in filenames if f.endswith(".log")]:
            print os.path.join(dirpath, filename)
    
  2. ==============================

    2.os.walk와 함께 glob 모듈을 사용할 수도 있습니다.

    os.walk와 함께 glob 모듈을 사용할 수도 있습니다.

    import os
    from glob import glob
    
    files = []
    start_dir = os.getcwd()
    pattern   = "*.log"
    
    for dir,_,_ in os.walk(start_dir):
        files.extend(glob(os.path.join(dir,pattern))) 
    
  3. ==============================

    3.Checkout Python 재귀 디렉토리 워커. 간단히 말해 os.listdir ()과 os.walk ()는 친구입니다.

    Checkout Python 재귀 디렉토리 워커. 간단히 말해 os.listdir ()과 os.walk ()는 친구입니다.

  4. ==============================

    4.나는 해결책이있다 :

    나는 해결책이있다 :

    import os
    for logfile in os.popen('find . -type f -name *.log').read().split('\n')[0:-1]:
          print logfile
    

    또는

    import subprocess
    (out, err) = subprocess.Popen(["find", ".", "-type", "f", "-name", "*.log"], stdout=subprocess.PIPE).communicate()
    for logfile in out.split('\n')[0:-1]:
      print logfile
    

    이 두 가지는 find를 이용합니다. -type f -name * .log.

    첫 번째 것은 더 간단하지만 보장되지 않습니다. 공백을 위해 -name * .log를 추가하면, 하지만 간단하게 찾을 수있는 일을 .. ../testdata -type f (내 OS X 환경에서).

    두 번째는 서브 프로세스를 사용하는 것이 더 복잡해 보이지만, 이것은 공백으로 안전한 것입니다 (다시 말해서, OS X 환경에서).

    이것은 Chris Bunch, 대답에 https://stackoverflow.com/a/3503909/2834102

  5. ==============================

    5.현재 디렉토리에 나열하려면 다음과 같이 사용할 수 있습니다.

    현재 디렉토리에 나열하려면 다음과 같이 사용할 수 있습니다.

    import os
    
    for e in os.walk(os.getcwd()):
        print e
    

    그냥

    os.getcwd()
    

    다른 경로로 이동하여 결과를 얻습니다.

  6. from https://stackoverflow.com/questions/954504/how-to-get-files-in-a-directory-including-all-subdirectories by cc-by-sa and MIT license