2017-11-09 4 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이 정확히 하나의 파일을 찾는다는 것을 의미하며, 실제로는 './.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)