How to get files in a directory, including all subdirectories

前端 未结 6 1447
耶瑟儿~
耶瑟儿~ 2020-12-04 12:45

I\'m trying to get a list of all log files (.log) in directory, including all subdirectories.

相关标签:
6条回答
  • 2020-12-04 13:24

    I have a solution:

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

    or

    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
    

    These two take the advantage of find . -type f -name *.log.

    The first one is simpler but not guaranteed for white-space when add -name *.log, but worked fine for simply find ../testdata -type f (in my OS X environment).

    The second one using subprocess seems more complicated, but this is the white-space safe one (again, in my OS X environment).

    This is inspired by Chris Bunch, in the answer https://stackoverflow.com/a/3503909/2834102

    0 讨论(0)
  • 2020-12-04 13:28

    If You want to list in current directory, You can use something like:

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

    Just change the

    os.getcwd()
    

    to other path to get results there.

    0 讨论(0)
  • 2020-12-04 13:30

    A single line solution using only (nested) list comprehension:

    import os
    
    path_list = [os.path.join(dirpath,filename) for dirpath, _, filenames in os.walk('.') for filename in filenames if filename.endswith('.log')]
    
    0 讨论(0)
  • 2020-12-04 13:32

    You can also use the glob module along with os.walk.

    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))) 
    
    0 讨论(0)
  • 2020-12-04 13:34
    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)
    
    0 讨论(0)
  • 2020-12-04 13:41

    Checkout Python Recursive Directory Walker. In short os.listdir() and os.walk() are your friends.

    0 讨论(0)
提交回复
热议问题