2016-12-20 22 views
0

このプログラムの目的は、ルートディレクトリ内のすべてのファイルとディレクトリを再帰的に見て、キーフレーズ(mainメソッドのfileという名前)の一致を見つけることです。私の主な問題は、サブディレクトリに入る方法を見つけ出すことができず、その中のすべてのファイルとディレクトリをループすることを確かめることができず、ツリー内のすべてのディレクトリルートディレクトリ。Pythonでフォルダを再帰的に読む

ここは私の現在のコードです。

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関数が、私はそれを正しく実行することはできません。

+0

を私はおそらくダウンとマークされますが、私は、ツリー全体を通過すでにos.walk、この投稿をした後、私は気づきました。したがって、os.walkを使用する関数は再帰的に使用する必要はありません。たぶん、誰かが正確にos.walkが何をしているのかを明確にすることができました。fucntionで読んだことは私には分かりませんでした。 –

答えて

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) 
+0

ありがとう、私はこの方法でファイルをループすることはできませんでした。タイトルだけでなく、ファイルを見ることができます。私のポストはやや曖昧だと分かっていますが、キーフレーズがファイル名またはディレクトリ名に存在するかどうかを調べるだけです。 –

関連する問題