在python中将没有时间戳的多行日志消息合并到一行中
我有一个以下格式的日志文件在python中将没有时间戳的多行日志消息合并到一行中,python,regex,Python,Regex,我有一个以下格式的日志文件 Wed Feb 21 00:59:32 2018 XXXXXX.x1:00000: message Wed Feb 21 00:59:33 2018 XXXXXX.x1:00000: message Wed Feb 21 00:59:33 2018 XXXXXX.x1:00000: message Wed Feb 21 00:59:33 2018 XXXXXX.x1:00000: message '----action----tansfer' '-
Wed Feb 21 00:59:32 2018 XXXXXX.x1:00000: message
Wed Feb 21 00:59:33 2018 XXXXXX.x1:00000: message
Wed Feb 21 00:59:33 2018 XXXXXX.x1:00000: message
Wed Feb 21 00:59:33 2018 XXXXXX.x1:00000: message
'----action----tansfer'
'----failed----'
Wed Feb 21 00:59:33 2018 XXXXXX.x1:00000: message
<Error occurred at line 44>
<html>
.....
....
....
</html>
Wed Feb 21 00:59:33 2018 XXXXXX.x1:00000: message
Wed Feb 21 00:59:32 2018 XXXXXX.x1:00000:message
2018年2月21日星期三00:59:33 XXXXXX.x1:00000:消息
2018年2月21日星期三00:59:33 XXXXXX.x1:00000:消息
2018年2月21日星期三00:59:33 XXXXXX.x1:00000:消息
“----行动----tansfer”
“----失败--”
2018年2月21日星期三00:59:33 XXXXXX.x1:00000:消息
.....
....
....
2018年2月21日星期三00:59:33 XXXXXX.x1:00000:消息
我需要将日志格式化为以下格式,以便应用一些文本处理逻辑
Wed Feb 21 00:59:32 2018 XXXXXX.x1:00000: message
Wed Feb 21 00:59:33 2018 XXXXXX.x1:00000: message
Wed Feb 21 00:59:33 2018 XXXXXX.x1:00000: message
Wed Feb 21 00:59:33 2018 XXXXXX.x1:00000: message '----action----tansfer' '----failed----'
Wed Feb 21 00:59:33 2018 XXXXXX.x1:00000: message <Error occurred at line 44> <html>.... ..... ....</html>
Wed Feb 21 00:59:33 2018 XXXXXX.x1:00000: message
Wed Feb 21 00:59:32 2018 XXXXXX.x1:00000:message
2018年2月21日星期三00:59:33 XXXXXX.x1:00000:消息
2018年2月21日星期三00:59:33 XXXXXX.x1:00000:消息
2018年2月21日星期三00:59:33 XXXXXX.x1:00000:消息'----操作----tansfer''----失败----'
2018年2月21日星期三00:59:33 XXXXXX.x1:00000:消息。。。。
2018年2月21日星期三00:59:33 XXXXXX.x1:00000:消息
是否可以获取此格式的日志消息。我在想这样的事情——如果新行字符后面没有日期正则表达式,那么就用空格字符替换,但是不能完全构造正则表达式
TIA下面的代码将读取日志文件,然后以所需格式将其写入out.txt文件。我使用re来完成这个任务,并在下一行对Wed进行了负面展望
import re
with open('log.txt', 'r') as f:
a = f.read()
a = re.sub(r'\n(?!Wed)', '', a)
with open('out.txt', 'w') as f:
f.write(a)
输出:
Wed Feb 21 00:59:32 2018 XXXXXX.x1:00000: message
Wed Feb 21 00:59:33 2018 XXXXXX.x1:00000: message
Wed Feb 21 00:59:33 2018 XXXXXX.x1:00000: message
Wed Feb 21 00:59:33 2018 XXXXXX.x1:00000: message '----action----tansfer' '----failed----'
Wed Feb 21 00:59:33 2018 XXXXXX.x1:00000: message <Error occurred at line 44><html>.............</html>
Wed Feb 21 00:59:33 2018 XXXXXX.x1:00000: message
Wed Feb 21 00:59:32 2018 XXXXXX.x1:00000:message
2018年2月21日星期三00:59:33 XXXXXX.x1:00000:消息
2018年2月21日星期三00:59:33 XXXXXX.x1:00000:消息
2018年2月21日星期三00:59:33 XXXXXX.x1:00000:消息'----操作----tansfer''----失败----'
2018年2月21日星期三00:59:33 XXXXXX.x1:00000:消息。。。。。。。。。。。。。
2018年2月21日星期三00:59:33 XXXXXX.x1:00000:消息
此正则表达式字符串看起来像您需要的:
'.*\d{2}\:\d{2}\:\d{2}\ \d{4}.*'
它尝试与此匹配:
00:59:33 2018 # Any number works as long as it's this format
只是我的非正则表达式方法:
with open("./t.txt") as read_file: #Current Log file
with open("./fix_t.txt", 'w') as write_file: #A new log file
data = False
for line in read_file:
if "message" in line:
if data: write_file.write(data + "\n")
data = line.strip("\n")
else:
data += line.strip("\n")
if data: write_file.write(data + "\n")
生成新的日志文件:
Wed Feb 21 00:59:32 2018 XXXXXX.x1:00000: message
Wed Feb 21 00:59:33 2018 XXXXXX.x1:00000: message
Wed Feb 21 00:59:33 2018 XXXXXX.x1:00000: message
Wed Feb 21 00:59:33 2018 XXXXXX.x1:00000: message '----action----tansfer' '----failed----'
Wed Feb 21 00:59:33 2018 XXXXXX.x1:00000: message <Error occurred at line 44><html>.............</html>
Wed Feb 21 00:59:33 2018 XXXXXX.x1:00000: message
Wed Feb 21 00:59:32 2018 XXXXXX.x1:00000:message
2018年2月21日星期三00:59:33 XXXXXX.x1:00000:消息
2018年2月21日星期三00:59:33 XXXXXX.x1:00000:消息
2018年2月21日星期三00:59:33 XXXXXX.x1:00000:消息'----操作----tansfer''----失败----'
2018年2月21日星期三00:59:33 XXXXXX.x1:00000:消息。。。。。。。。。。。。。
2018年2月21日星期三00:59:33 XXXXXX.x1:00000:消息
谢谢@mamun,我稍微修改了你的正则表达式,找到了完整的日期时间,而不是“Wed”,我正在使用下面的正则表达式,它对我有用<代码>\n(?([a-zA-Z]{3}\s(一月|二月|三月|四月|五月|六月|七月|八月|九月|十月|十一月|十二月){2}\s\d{2}:\d{2}:\d{2}\s\d{4})