在Python中递归读取文件夹

时间:2016-12-20 21:44:32

标签: python python-2.7 recursion sys

此程序的目的是以递归方式查看根目录中的所有文件和目录,以查找关键短语(main方法中的命名文件)的任何匹配项。我的主要问题是我无法弄清楚如何进入子目录并确保我遍历其中的所有文件和目录,然后继续这样做,直到我完成了所有已启动的树中的目录从根目录。

这是我目前的代码。

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)

我尝试使用os.chdir(new_path)更改目录但是我最终遇到问题,因为我迷失了何时更改目录等等。我觉得有一种方法可以递归使用search_dir功能,但经过深思熟虑后我无法正确执行。

1 个答案:

答案 0 :(得分:2)

这应该这样做:

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)