2017-11-09 11 views
1

私はこの最初のビットで現在の月と年の値を抽出します。ファイル名の現在の年と月のパターンマッチング

目標は、月が現在の月と一致しない場合は、名前形式が「access.log.2017-11」のログファイルディレクトリ内のすべてのファイルを検索(および削除)することです。

log_file_dir = '/home/eos/test/dir' 

cur_date = datetime.date.today() 
cur_month = cur_date.strftime('%m') # returns '11', '03'... 
cur_year = cur_date.strftime('%Y') # returns 2001, 2017... 

私はグロブと試みたが、私が同様に考えていたもののために試合をするようには見えません:「cur_year」のようなVAR名を挿入することができる任意の場所にあります

os.chdir(log_file_dir) 
glob.glob('./.log.cur_year-cur_month') # nope, not working 

それを見つけることができるようにパターンマッチング式で?

答えて

0

'./.log.cur_year-cur_month'と書くと全体の文字列とみなされます。あなたは変数を使用したい場合は、文字列でそれらを連結する必要があると引用符にそれらを入れていない:'./.log.' + cur_year + '-' + cur_month

0
glob.glob('./.log.cur_year-cur_month') 

は何のフォーマット、ない文字列補間または任意のワイルドカードがありません。これは、globがちょうど1つのファイルを探すことを意味します。これは、文字通り'./.log.cur_year-cur_month'です。このファイルはおそらくあなたのフォルダにありません。

あなたは使用することができます

cur_date.strftime('*.log.%Y-%m') 

glob patternとして。それは.log.2017-11で終わるすべてのファイルを与えるはずです。次のように

0

あなたはグロブパターン*.log.2017-11を必要とする、これを作成することができます。

from datetime import datetime 
import glob 

log_file_dir = '/home/eos/test/dir' 
log_file_dir = r'e:\python temp' 
cur_date = datetime.today().strftime('%Y-%m') 

for filename in glob.glob(os.path.join(log_file_dir, '*.log.{}'.format(cur_date))): 
    os.remove(filename) 
関連する問題