玩蛇网提供最新Python编程技术信息以及Python资源下载!

Python什么方法可以判断是否在某个时间范围内

需求

获取某一个时间段的日志文件列表,日志文件名格式为alert-20150301.log

我的思路

  1. 输入时间范围[20150101, 20150630]
  2. glob.iglob 获取日志路径下的文件名列表
  3. 格式化文件名列表, 截取alert-20150301.log里面的时间 log_file[6: -4], 并判断是否在所输入时间范围内, int(log_file[6: -4]) in range(20150101, 20150630) ?
  4. 如果在所给出的时间范围内, 则存入列表, 若不存在则丢弃
#!/usr/bin/python

import os
import glob

def logfile_list(log_path):
    current_path = os.getcwd()
    os.chdir(log_path)
    for log_file in glob.iglob("alert*.log"):
        if int(log_file[6:-4]) in range(20150501, 20150630):
            print(log_file)
    os.chdir(current_path)

if __name__ == "__main__":
    log_path = "/tmp/logs/"
    logfile_list(log_path)

本人是python菜鸟, 只能想到这个方法,请问还有没有其他更好的方法呢?

你的需求甚至不需要动用编程语言

bashfind /tmp -iname "alert*.log" -newerct '2015-06-01' ! -newerct '2015-06-30'

如果你只是想定位文件,这样就够了,newerct请参考find的manpage当中的newerXY,感叹号是逻辑否。就是说上面语句的含义是,找出比6月1号新但是不比6月30号更新的文件

如果你想进一步处理,例如打印出这些文件的详细信息,可以:

bashfind /tmp -iname "alert*.log" -newerct '2015-06-01' ! -newerct '2015-06-30' -ls

把所有文件移动到某个地方

bashfind /tmp -iname "alert*.log" -newerct '2015-06-01' ! -newerct '2015-06-30' -exec mv {} /target \;

删除匹配的文件

bashfind /tmp -iname "alert*.log" -newerct '2015-06-01' ! -newerct '2015-06-30' -delete

"if int(log_file[6:-4]) in range(20150501, 20150630)" 这一句效率很低,直接 if LOWER_BOUND < x < HIGHER_BOUND 就可以,不需要生成一个实际的list并在其中去查找。

另外这个时间是基于文件名里hard code的时间,你也可以用os.stat把文件的meta data(如文件创建时间,文件最后访问时间,文件最后修改时间)给pull出来做比较。(这样和上面的find做的比较最后修改时间是类似的)

玩蛇网文章,转载请注明出处和文章网址:https://www.iplaypy.com/wenda/wd18546.html

相关文章 Recommend

玩蛇网Python互助QQ群,欢迎加入-->: 106381465 玩蛇网Python新手群
修订日期:2017年06月05日 - 19时31分45秒 发布自玩蛇网

您现在的位置: 玩蛇网首页 > Python问题解答 > 正文内容
我要分享到:

必知PYTHON教程 Must Know PYTHON Tutorials

必知PYTHON模块 Must Know PYTHON Modules