在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})