2011-10-20 25 views
5

私はかなりPythonを初めて使い慣れていますが、私はこのコードを手に入れました。特定のファイル拡張子を削除するPython

しかし、おそらく処理速度を高めるために、これをコード化するより効率的な方法があるのだろうかと思います。今

import os, glob 


def scandirs(path): 
    for currentFile in glob.glob(os.path.join(path, '*')): 
     if os.path.isdir(currentFile): 
      print 'got a directory: ' + currentFile 
      scandirs(currentFile) 
     print "processing file: " + currentFile 
     png = "png"; 
     jpg = "jpg"; 
     if currentFile.endswith(png) or currentFile.endswith(jpg): 
      os.remove(currentFile) 

scandirs('C:\Program Files (x86)\music\Songs') 

、そこにおよそ8000のファイルがあり、それはすべてのファイルを処理し、それが実際にPNGまたはJPGで終わるかどうかをチェックするためにかなりの時間を要します。あなたはサブディレクトリを再帰的にしているので

+1

おそらく['os.path.walk'](http://docs.python.org/library/os.path.html#os.path.walk)をチェックしたいと思うでしょう。 –

+0

ありがとう!私はそれを使用するつもりです。 – Two

答えて

15

os.walkを使用します。プログラムの動作や速度が許容される

import os 

def scandirs(path): 
    for root, dirs, files in os.walk(path): 
     for currentFile in files: 
      print "processing file: " + currentFile 
      exts = ('.png', '.jpg') 
      if any(currentFile.lower().endswith(ext) for ext in exts): 
       os.remove(os.path.join(root, currentFile)) 
+0

@Sam:訂正してくれてありがとう! – unutbu

+0

'exts =( '.png'、 '.jpg')'を 'exts = ['.png'、 '.jpg']'に変更すると、コードは1つの拡張だけでも機能します。 – AliBZ

+0

私は最後に3回目のforループを実行すると 'os.path.splitext()'メソッドを使用して比較を行うよりも遅くなると思っていましたが、私はこれをタイムアウトしています。 – Blairg23

1

場合、私はそれを変更しません。

それ以外の場合は、unutbuの回答を試すことができます。私は直接文字列を使用しないでどのような目的が表示されないよう

一般的に、私は

png = "png" 
jpg = "jpg" 

ものを離れて去ります。

「png」の代わりに「.png」をテストしてください。

アンでもよりよい解決策はどこかcentally

extensions = ('.png', '.jpg') 

を定義し、

if any(currentFile.endswith(ext) for ext in extensions): 
    os.remove(currentFile) 

にそれを使用することです。

関連する問題