2012-02-23 9 views
0

ファイルの名前とフォルダのパス名をパラメータとし、そのフォルダ内のファイルとそれに含まれるフォルダを直接的または間接的に検索するプログラムが必要です。この関数は、見つかった場合はファイルのパス名を返し、フォルダまたはフォルダの任意のサブディレクトリにファイルが見つからない場合はNoneを返します。関数は再帰的でなければなりません。ファイルのパス名を再帰的に返す

def search(fname, path): 

    for item in os.listdir(path): 
     next = os.path.join(path, item) 
     try: 
      search(next,fname) 
     except: 
      return next 

が、それはの線に沿って何かのようになります:

>>>search('fileA.txt', 'test') 
'test\\fileA.txt' 
>>>search('fileB.txt', 'test') 
'text\\folder2\\fileB.txt' 

電気ショック療法

は、ここに私のコードです。 しかし、私は見つけることができるファイルに関係なく、fileA.txtを見つけるために私のコードを得ることができます。

私は、これは彼女が私に言ったことで、いくつかの助けのために先生に尋ねた:あなたが実際に確認し、あなたの関数で条件を持っていない

  1. :私はいくつかの問題を参照してください。**

    あなたがファイルを見つけたかどうか確認してください。これを変更する際には、次の問題を参照してください。

  2. すでにパスを追加している場合、fnameはそれに対応するファイルと一致しません。ファイルの絶対パス名を作成する前に、ファイル名を確認する必要があります。そうしないと、ファイル名と一致する方法がありません。
  3. 再帰呼び出しから返される値は何もしません。それらはパスかNoneを戻す必要があり、戻ってくるものをチェックしていません。**
+1

なぜ 'try' /' except'を使用していますか?私は 'if' /' else'を探していると思います。 –

+0

詳細を教えてください? – AngelE

答えて

2

再帰要素が混在しています。試してくださいsearch(fname, next)

また、Brendanに記載されているように、ここにはエラーがスローされていないので、if/elseではなくtry/exceptを使用する必要があります。

最後に、基本ケース(トラバースするディレクトリがもうない)、再帰を終了し、無限ループ/再帰を防ぐ最終条件を持つようには思われません。

1

あなたはこれを行うには)(os.walk使用することができます

import os 

def search(fname, path): 
    for root, dirs, files in os.walk(path): 
     if fname in files: 
      return os.path.join(root, file) 
     else: 
      return None 
+0

私はそれを追加することを考えていましたが、先生が「os.walk」を再考してほしいと思っています。 – Edwin

+0

公正な点は、「要件」による割り当てが再帰的であるために集められたはずです。 – aravenel

+0

うん、それは残念ながら再帰的でなければならず、私はまだ問題を抱えている:/ – AngelE

0

あなたは再帰終了条件を必要としています。関数が返すべき条件と、それを見続けるべき条件について考える。次に、これらの条件をテストするためにブロックif/elseを書きます。戻り条件が成立している場合は、正しい値を返します。それ以外の場合は、再帰呼び出しの結果を返します。言い換えれば、次のようになります(0120)。

def search(old_args) 
    if condition: 
     return 'value' # recursion terminates and value is returned 
    else:    # all the way down the call stack 
     return search(new_args) # continue recursion until `condition` holds & 
           # pass the result down the stack with `return` 
関連する問題