2012-04-11 9 views
0

私は、私のループから望ましい出力を得るために少し援助を探しています。ifループからの検索結果の絞り込みを支援しますか?

私は 'published'という名前のフォルダまでのパスのリストをコンパイルしようとしています。それはほぼ動作しますが、誰かが私に、「公開された」子どもであるディレクトリを吐くループを止める方法を示すことができたら、感謝します。何が起こっている

import os 

file = open('published_directories_list.txt', 'w'); 
top = "T:\PROJECTS"; 

for root, dirs, files in os.walk(top, topdown=False): 
    for name in dirs: 
     myPath = os.path.join(root, name); 

     if 'published' in myPath: 
      print (myPath); 
      file.write(myPath + '\n'); 
     else: 
      print (myPath + ' - no published directory!'); 

file.close(); 

print('DONE!'); 
+0

「myPathで公開された」は 'mypath ="/sadly/unpublished "'にTrueを与えます。これはあなたが望むものではないかもしれません。 – DSM

答えて

1

top下のすべてのディレクトリを超えるos.walk反復するということです。あなたのループの中でいくつかの点あなたのラインで

top 
    | 
    - published 
    | | 
    | - something 
    | 
    - other 

:あなたのようなディレクトリ構造を持っているのであれば、

myPath = os.path.join(root, name) 

/top/publishedの根とsomethingの名前を参加します。明らかに、その後、あなたがif "published" is in myPathをチェックするとそれはなります。 publishedのサブディレクトリを見ていても、あなたのパスには「公開された」という名前が表示されます。

この問題を解決する簡単な方法は、myPathが単に「公開済み」(文字列方法endswithを使用)で終わるかどうかをチェックすることです。あなたは読むためにあなたのifステートメントを変更できます。私は、我々がチェックしているものの先頭にバックスラッシュを含める

if myPath.endswith('/published') 

注意。これはDSMのポイントを修正して、「未公開」にもマッチさせたくないのです。

0
>>> import os 
>>> folder = 'MUI' 
>>> for root, dirs, files in os.walk('C:\\windows'): 
    for dir_ in dirs: 
     if folder.lower() == dir_.lower(): 
      print os.path.join(root, folder) 
      dirs.remove(dir_) 


C:\windows\MUI 
C:\windows\AppPatch\MUI 
C:\windows\Help\MUI 
C:\windows\Help\Tours\htmlTour\MUI 
C:\windows\Help\Tours\mmTour\MUI 
C:\windows\Help\Tours\WindowsMediaPlayer\MUI 
C:\windows\Microsoft.NET\Framework\v2.0.50727\MUI 
C:\windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\MUI 
C:\windows\pchealth\MUI 
C:\windows\Resources\Themes\Luna\MUI 
C:\windows\Resources\Themes\Luna\Shell\Homestead\MUI 
C:\windows\Resources\Themes\Luna\Shell\Metallic\MUI 
C:\windows\Resources\Themes\Luna\Shell\NormalColor\MUI 
C:\windows\srchasst\MUI 
C:\windows\system32\MUI 
C:\windows\system32\oobe\MUI 
C:\windows\system32\wbem\MUI 
C:\windows\Web\MUI 

(子どもたちはここで閲覧されないように)を反復しながら、はい、あなたはdirsに触れることができます!

Windowsは大文字と小文字を区別しないで比較しますが、小文字で表示します。 Unixのようなシステムでは、ループなしのif folder in dirsのような比較が良い方法でしょう。

関連する問題