How to use glob() to find files recursively?

前端 未结 28 1755
天涯浪人
天涯浪人 2020-11-21 22:54

This is what I have:

glob(os.path.join(\'src\',\'*.c\'))

but I want to search the subfolders of src. Something like this would work:

<
相关标签:
28条回答
  • 2020-11-21 23:32

    For python 3.5 and later

    import glob
    
    #file_names_array = glob.glob('path/*.c', recursive=True)
    #above works for files directly at path/ as guided by NeStack
    
    #updated version
    file_names_array = glob.glob('path/**/*.c', recursive=True)
    

    further you might need

    for full_path_in_src in  file_names_array:
        print (full_path_in_src ) # be like 'abc/xyz.c'
        #Full system path of this would be like => 'path till src/abc/xyz.c'
    
    0 讨论(0)
  • 2020-11-21 23:33

    I modified the top answer in this posting.. and recently created this script which will loop through all files in a given directory (searchdir) and the sub-directories under it... and prints filename, rootdir, modified/creation date, and size.

    Hope this helps someone... and they can walk the directory and get fileinfo.

    import time
    import fnmatch
    import os
    
    def fileinfo(file):
        filename = os.path.basename(file)
        rootdir = os.path.dirname(file)
        lastmod = time.ctime(os.path.getmtime(file))
        creation = time.ctime(os.path.getctime(file))
        filesize = os.path.getsize(file)
    
        print "%s**\t%s\t%s\t%s\t%s" % (rootdir, filename, lastmod, creation, filesize)
    
    searchdir = r'D:\Your\Directory\Root'
    matches = []
    
    for root, dirnames, filenames in os.walk(searchdir):
        ##  for filename in fnmatch.filter(filenames, '*.c'):
        for filename in filenames:
            ##      matches.append(os.path.join(root, filename))
            ##print matches
            fileinfo(os.path.join(root, filename))
    
    0 讨论(0)
  • 2020-11-21 23:33

    I needed a solution for python 2.x that works fast on large directories.
    I endet up with this:

    import subprocess
    foundfiles= subprocess.check_output("ls src/*.c src/**/*.c", shell=True)
    for foundfile in foundfiles.splitlines():
        print foundfile
    

    Note that you might need some exception handling in case ls doesn't find any matching file.

    0 讨论(0)
  • 2020-11-21 23:34
    import sys, os, glob
    
    dir_list = ["c:\\books\\heap"]
    
    while len(dir_list) > 0:
        cur_dir = dir_list[0]
        del dir_list[0]
        list_of_files = glob.glob(cur_dir+'\\*')
        for book in list_of_files:
            if os.path.isfile(book):
                print(book)
            else:
                dir_list.append(book)
    
    0 讨论(0)
提交回复
热议问题