python判断是否在某个时间范围内?
需求
获取某一个时间段的日志文件列表,日志文件名格式为alert-20150301.log
我的思路
- 输入时间范围[20150101, 20150630]
- glob.iglob 获取日志路径下的文件名列表
- 格式化文件名列表, 截取alert-20150301.log里面的时间 log_file[6: -4], 并判断是否在所输入时间范围内, int(log_file[6: -4]) in range(20150101, 20150630) ?
- 如果在所给出的时间范围内, 则存入列表, 若不存在则丢弃
#!/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菜鸟, 只能想到这个方法,请问还有没有其他更好的方法呢?
木下、秀吉
10 years, 4 months ago
Answers
你的需求甚至不需要动用编程语言
bash
find /tmp -iname "alert*.log" -newerct '2015-06-01' ! -newerct '2015-06-30'
如果你只是想定位文件,这样就够了,newerct请参考find的manpage当中的newerXY,感叹号是逻辑否。就是说上面语句的含义是,找出比6月1号新但是不比6月30号更新的文件
如果你想进一步处理,例如打印出这些文件的详细信息,可以:
bash
find /tmp -iname "alert*.log" -newerct '2015-06-01' ! -newerct '2015-06-30' -ls
把所有文件移动到某个地方
bash
find /tmp -iname "alert*.log" -newerct '2015-06-01' ! -newerct '2015-06-30' -exec mv {} /target \;
删除匹配的文件
bash
find /tmp -iname "alert*.log" -newerct '2015-06-01' ! -newerct '2015-06-30' -delete
gloom
answered 10 years, 4 months ago