python - 在 Python 中搜索和排序文件
问题描述
我正在尝试设置一个脚本来查看包含 IP 地址和日期等内容的单个文件。我想提取所有超过 365 天的数据并有一个文本文件可供查看。我不断遇到语法错误等问题。
我试过改变
day = eval(line) to day = str(line) but I get
TypeError: can't compare datetime.date to str
#!/bin/env python
from datetime import timedelta
import datetime
limit = datetime.datetime.now() + timedelta(days=365)
with open('filename') as ifile:
for line in ifile:
day = eval(line)
if day > limit:
break
formatted_dates = [(item[0], item[1].strptime("%d/%m/%y"), item[2]) for item in sorted_dates]
for date in formatted_dates:
print ('{}: {}'.format(date))
我想得到一个新文件,内容为:
128.xxx.xxx.xx [%d %m %y] 从最旧到最新。
我不断得到:
File "./scrpitpyth.py", line 9, in <module>
day = eval(line)
File "<string>", line 1
128.xxx.xxx.xx - - [02/Feb/2016:15:00:26 -0700]
SyntaxError: invalid syntax
我试图解析的数据如下:
128.xxx.xxx.xxx - - [20/Mar/2017:09:54:03 -0600] “POST /work/labor/HTTP/1.1”
128.xxx.xxx.xxx - - [23/Mar/2017:09:54:03 -0600] "GET /work/ HTTP/1.1" 200
128.xxx.xxx.xxx - - [24/Mar/2017:09:56:02 -0600] “获取 /work/view/laborcats
解决方案
我会将此添加为评论,但我的业力太低了。
通常不建议使用 eval 函数,因为它只执行传递的任何字符串。在这种情况下,您尝试将字符串128.xxx.xxx.xx - - [02/Feb/2016:15:00:26 -0700]
作为 python 命令运行。由于这不是有效的python,因此您会失败。
为了解决这个问题,我建议使用 datetime 库中的 strptime 函数将时间戳字符串转换为 datetime 对象,然后您可以使用此对象进行时间过滤。