2016-10-05 19 views
0

特定のファイルが見つかるまで、すべてのディレクトリを再帰的に通過するPythonの最良の方法は何ですか? 私は自分のディレクトリ内のすべてのファイルを調べ、私が探しているファイルがそのディレクトリにあるかどうかを確認したい。 見つからない場合は、親ディレクトリに移動して処理を繰り返します。私はまた、ファイルを見つける前に、私が通過するディレクトリとファイルの数を と数えたいと思います。何のファイルPythonで特定のファイルを見つけるまで、すべてのディレクトリを再帰的に実行します

STARTDIR =「ユーザー/..../ file.txtは」

同じfindfileがないことをループのリターンの 最後にファイルがない場合は、ファイルの名前です。これは私の現在のループですが、再帰を使って動作させたいのです。

def walkfs(startdir, findfile): 
    curdir = startdir 
    dircnt = 0 
    filecnt = 0 
    for directory in startdir: 
     for file in directory: 
      curdir = file 
      if os.path.join(file)==findfile: 
       return (dircnt, filecnt, curdir) 
      else: 
       dircnt+=1 
       filecnt+=1 
+0

:ちょうどあなたのディレクトリを再帰的にトラバース以上のループを与える、os.walk() functionを使用しています。 https://docs.python.org/2/library/glob.html –

答えて

0
def findPath(startDir,targetFile): 
    file_count = 0 
    for i,(current_dir,dirs,files) in enumerate(os.walk(startDir)): 
     file_count += len(files) 
     if targetFile in files: 
      return (i,file_count,os.path.join(current_dir,targetFile)) 
    return (i,file_count,None) 

print findPath("C:\\Users\\UserName","some.txt") 
3

はディレクトリ再帰ホイールを再発明しないでください。おそらく、 `glob`モジュールまたは` os.listdir`どちらか

def walkfs(startdir, findfile): 
    dircount = 0 
    filecount = 0 
    for root, dirs, files in os.walk(startdir): 
     if findfile in files: 
      return dircount, filecount + files.index(findfile), os.path.join(root, findfile) 
     dircount += 1 
     filecount += len(files) 
    # nothing found, return None instead of a full path for the file 
    return dircount, filecount, None 
+0

彼は、彼が最初に見つけた道を返そうとしていると言ったと思います。 –

+2

@JoranBeasley:これはそうではないと思いますか? –

+0

derr ...申し訳ありません...私はちょうどあなたがマッチを数えていたと思ったばかげたようなカウントのものを見ました:P –

関連する問題