|
5鱼币
import re
from datetime import datetime
def save_logs_to_file(log_file, start_time, end_time, output_file):
logs_within_range = []
pattern = r'\[(.*?)\]' # 正则表达式模式,用于提取日志中的时间戳
with open(log_file, 'r') as file:
for line in file:
timestamp_match = re.search(pattern, line)
if timestamp_match:
timestamp_str = timestamp_match.group(1)
log_time = datetime.strptime(timestamp_str, '%Y-%m-%d %H:%M:%S') # 解析时间戳为 datetime 对象
if start_time <= log_time <= end_time:
logs_within_range.append(line.strip())
with open(output_file, 'w') as outfile:
for log in logs_within_range:
outfile.write(log + '\n')
def read_time_from_file(start_time_file, end_time_file):
with open(start_time_file, 'r') as start_file, open(end_time_file, 'r') as end_file:
start_time_str = start_file.readline().strip()
end_time_str = end_file.readline().strip()
# 清理时间字符串中的额外字符
start_time_str = start_time_str.strip()
end_time_str = end_time_str.strip()
# 检查时间字符串长度是否符合要求
if len(start_time_str) != len('YYYY-MM-DD HH:MM:SS') or len(end_time_str) != len('YYYY-MM-DD HH:MM:SS'):
raise ValueError('时间字符串格式不正确')
start_time = datetime.strptime(start_time_str, '%Y-%m-%d %H:%M:%S')
end_time = datetime.strptime(end_time_str, '%Y-%m-%d %H:%M:%S')
return start_time, end_time
log_file = r'C:\Users\huawei\Desktop\server.log'
start_time_file = r'C:\Users\huawei\Desktop\start_time.txt' # 开始时间文件路径
end_time_file = r'C:\Users\huawei\Desktop\end_time.txt' # 结束时间文件路径
output_file = r'C:\Users\huawei\Desktop\1.txt' # 输出文件路径
start_time, end_time = read_time_from_file(start_time_file, end_time_file)
save_logs_to_file(log_file, start_time, end_time, output_file)
时间为 2022-06-30 10:00:00 2022-06-30 12:00:00
报错内容是 (data_string, format))
ValueError: time data ' 01' does not match format '%Y-%m-%d %H:%M:%S'
麻烦大佬看看
问题出在读取开始时间和结束时间的文件时,存在额外的空格字符导致时间字符串格式不正确。在读取时间字符串前,需要清理字符串中的额外字符。修改read_time_from_file函数的代码如下:
- def read_time_from_file(start_time_file, end_time_file):
- with open(start_time_file, 'r') as start_file, open(end_time_file, 'r') as end_file:
- start_time_str = start_file.readline().strip()
- end_time_str = end_file.readline().strip()
- # 清理时间字符串中的额外字符
- start_time_str = start_time_str.strip()
- end_time_str = end_time_str.strip()
- # 检查时间字符串长度是否符合要求
- if len(start_time_str) != len('YYYY-MM-DD HH:MM:SS') or len(end_time_str) != len('YYYY-MM-DD HH:MM:SS'):
- raise ValueError('时间字符串格式不正确')
- start_time = datetime.strptime(start_time_str, '%Y-%m-%d %H:%M:%S')
- end_time = datetime.strptime(end_time_str, '%Y-%m-%d %H:%M:%S')
- return start_time, end_time
复制代码
这样修改后,再次运行代码应该就不会报错了。
|
最佳答案
查看完整内容
问题出在读取开始时间和结束时间的文件时,存在额外的空格字符导致时间字符串格式不正确。在读取时间字符串前,需要清理字符串中的额外字符。修改read_time_from_file函数的代码如下:
这样修改后,再次运行代码应该就不会报错了。
|