在 Python 中递归读取文件夹
Reading folders recursively in Python
这个程序的目的是递归地查看根目录中的所有文件和目录,以找到任何匹配的关键短语(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函数,但想来想去还是无法正确执行。
应该这样做:
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)
这个程序的目的是递归地查看根目录中的所有文件和目录,以找到任何匹配的关键短语(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函数,但想来想去还是无法正确执行。
应该这样做:
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)