2011-08-27 22 views
8

私は多少Pythonには新しく、これを私自身で把握しようとしてきましたが、これまでのところ少ししか入手できませんでした。基本的に私は再帰的にディレクトリを検索するスクリプトを探しています、そして、それはサブディレクトリであり、少なくとも24時間古いですが、ディレクトリを変更しないファイルを削除します。 アドバイスや例がありがとうございます。Python - 古いファイルを削除する

おかげ

+2

あなたはこれまでに何を試みましたか、それは何が間違っていますか? – Mark

+0

ビットとピースを見てみましょう、おそらく一緒に接着剤を助けることができますか? – Johnsyweb

+1

ディレクトリを変更せずにディレクトリからファイルを削除することはできません。 –

答えて

5

あなたはそれを再帰的にすべてのディレクトリ内のすべてのファイルをチェックする必要がある場合は、このような何かを行うべき:

import os, time 

path = "/path/to/folder" 
def flushdir(dir): 
    now = time.time() 
    for f in os.listdir(dir): 
     fullpath = os.path.join(dir, f) 
     if os.stat(fullpath).st_mtime < (now - 86400): 
      if os.path.isfile(fullpath): 
       os.remove(fullpath) 
      elif os.path.isdir(fullpath): 
       flushdir(fullpath) 

flushdir(path) 
28

これは再帰的にディレクトリを検索するos.walkメソッドを使用しています。各ファイルについて、変更された日付をos.path.getmtimeでチェックし、それをdatetime.now(現在の時刻)と比較します。 datetime.timedeltaは、24時間のタイムデルタを作成するように構築されています。

スクリプトが呼び出されるときにカレントディレクトリであるディレクトリos.path.curdirを検索します。 dir_to_searchを別のものに設定することができます。スクリプトへのパラメータ。

import os 
import datetime 

dir_to_search = os.path.curdir 
for dirpath, dirnames, filenames in os.walk(dir_to_search): 
    for file in filenames: 
     curpath = os.path.join(dirpath, file) 
     file_modified = datetime.datetime.fromtimestamp(os.path.getmtime(curpath)) 
     if datetime.datetime.now() - file_modified > datetime.timedelta(hours=24): 
      os.remove(curpath)