文件名中当前年份和月份的模式匹配

时间:2017-11-09 09:32:47

标签: python file directory

我有这个初始位来提取当前月份和年份值。

目标是查找(并删除)日志文件目录中的所有文件,其名称格式为' 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...

我尝试使用glob但它似乎并没有像我的想法那样匹配:

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

var名称是否包含' cur_year'可以插入模式匹配表达式,以便找到它们吗?

3 个答案:

答案 0 :(得分:1)

当你写'./.log.cur_year-cur_month'时,它被认为是一个完整的字符串。如果你想使用变量,你必须将它们与字符串连接起来,而不是将它们放在引号中:'./.log.' + cur_year + '-' + cur_month

答案 1 :(得分:1)

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

没有格式,没有字符串插值或任何通配符。这意味着glob将只查找一个文件,即字面'./.log.cur_year-cur_month'。该文件可能不在您的文件夹中。

您可以使用:

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

作为glob pattern。它应该为您提供以.log.2017-11结尾的每个文件。

答案 2 :(得分:1)

您需要一个glob模式*.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)