简体   繁体   中英

Reading folders recursively in Python

The purpose of this program is to recursively look through all the files and directories in a root directory to find any matches of a key phrase (named file in main method). My main issue is that I cannot figure out how to get into the subdirectories and make sure I loop through all of the files and directories in it, and then continue doing so until I've went through all directories in the tree that started from the root directory.

Here is my current code.

import os
import sys

def search_dir(path):
    for root, dirs, files in os.walk(os.path.abspath(path)):
        for f in files:
            if file in f:
                print("File : {}".format(os.path.join(root, f)))
        for d in dirs:
            if file in d:
                print("Dir  : {}".format(os.path.join(root, d)))

def main(file, path):
    print("Starting search for '{}'\n".format(file))
    search_dir(path)
    print("\nDone Searching")


if __name__ == "__main__":
    if len(sys.argv)!=3:
        print("Usage: python find_file.py [path] [file]")
    else:
        path, file = sys.argv[1], sys.argv[2]
        main(file, path)

I've tried changing directories using os.chdir(new_path) but I end up running into problems as I get lost on when to change directories back etc. I feel as though there is a way to recursively use the search_dir function, but after much thought I cannot execute it correctly.

This should do it:

import os

def search_dir(root, search):
    for root, _dirnames, fnames in os.walk(root):
        for fname in fnames:
            fpath = os.path.join(root, fname)
            with open(fpath) as infile:
                if any(search in line for line in infile):
                    print("Search term found in", fpath)


if _name__ == "__main__":
    if len(sys.argv)!=3:
        print("Usage: python find_file.py [path] [searchTerm]")
    else:
        path, search = sys.argv[1], sys.argv[2]
        main(file, search)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM