2011-09-15 6 views
1

自分の/ home/n00bディレクトリにprogram1.pyというファイルを作成しました。 私はPythonを開いたので、場所を見つけるためのスクリプトを書くことができるかどうかを見たいと思っていました。私はこれをした:os.walk()でファイルが見つかりません

for f in os.walk('/home/n00b'): 
    print 'searching', f 
    if 'program1.py' in f: 
      print 'found' 
      break 

なぜこれは動作しないのですか?私の画面は「検索」の部分でいっぱいになるので各ファイルを検索しているようですが、それは決して見つけられません。

+0

コードが奇妙に見える場合は申し訳ありません。私のiPhoneからポストされた理由を説明します。 ; O – jjJ

答えて

4

os.walkは、3つのタプルを返すので、それが動作していません:現在のディレクトリ、ここではディレクトリ名のリストと、ここでファイル名のリスト:

for curdir, dirs, files in os.walk('/home/n00b'): 
    print 'searching', files 
    if 'program1.py' in files: 
      print 'found' 
      break 

はあなたのprint文はあなたのことを示している必要があります。 in演算子はタプルを深く見ないでしょうし、ファイル名はタプルの3つの要素のいずれかではなかったので、コードはそれを見つけられませんでした。

+0

ああ、それで、なぜ?ムチョス・グラ​​シアス。 – jjJ

0

機能os.walk()は期待通りの動作をしません。ファイルのリストを与える代わりに、Directory、Subdirectory、Filesのタプル(リストに似ています)を与えます。だから、あなたは使用することができます:

for d, s, f in os.walk('/home/n00b'): 
    print 'searching', d 
    if 'program1.py' in f: 
      print 'found' 
      break 

希望することができます。

0

f - > f [2]を変更するだけで、walkで返されたタプルの3番目の要素を取得できます。

for f in os.walk('/home/n00b'): 
    print 'searching', f 
    if 'program1.py' in f[2]: 
      print 'found' 
      break 
+0

ハ!私たちはすべて同じ時間にそこに着きました...私はネッドの答えが好きです。なぜなら、私が3バイトの変更しか必要としないにもかかわらず、何が起こっているのか(そしてもっと一般的です) – sillyMunky

関連する問題