You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pandas分割日志文件内容,如何生成指定的6列?

日志行精准分割为指定6列的解决方案

问题场景

有格式固定的日志行如下:

2022-10-20 14:23:06,709 [12] INFO XXXX.XXXX.XXXX.XXXX - XXXX XXXX, Added XXXX in XXXX for thread: XX, XXXX exists: XXX

需要将其分割为6列:

  • 列1:日期(2022-10-20)
  • 列2:时间戳(14:23:06,709)
  • 列3:线程ID([12])
  • 列4:日志级别(INFO)
  • 列5:类/模块名(XXXX.XXXX.XXXX.XXXX)
  • 列6:日志内容(XXXX XXXX, Added XXXX in XXXX for thread: XX, XXXX exists: XXX)

直接用空格分割会因日志内容含空格生成过多列,以下是两种可行的分割方法:

方法一:正则表达式分割

利用正则匹配前5列的固定格式,将剩余内容统一作为第6列,适合批量处理同格式日志。

以Python为例,代码示例:

import re

log_line = "2022-10-20 14:23:06,709 [12] INFO XXXX.XXXX.XXXX.XXXX - XXXX XXXX, Added XXXX in XXXX for thread: XX, XXXX exists: XXX"
# 正则模式匹配各列格式
pattern = r'^(\d{4}-\d{2}-\d{2}) (\d{2}:\d{2}:\d{2},\d{3}) (\[\d+\]) (\w+) (\S+) - (.*)$'
match_result = re.match(pattern, log_line)

if match_result:
    columns = match_result.groups()
    print("分割结果:")
    for idx, col in enumerate(columns, 1):
        print(f"列{idx}:{col}")

正则逻辑说明:

  • ^(\d{4}-\d{2}-\d{2}):匹配第一列的日期格式
  • (\d{2}:\d{2}:\d{2},\d{3}):匹配第二列带毫秒的时间戳
  • (\[\d+\]):匹配第三列带方括号的线程ID
  • (\w+):匹配第四列的日志级别(如INFO/WARN/ERROR)
  • (\S+):匹配第五列不含空格的类/模块名
  • - (.*)$:匹配- 之后的所有内容作为第六列

方法二:手动分步拆分

针对日志格式完全固定的情况,通过分步拆分固定分隔点来提取各列,逻辑更直观。

以Python为例,代码示例:

log_line = "2022-10-20 14:23:06,709 [12] INFO XXXX.XXXX.XXXX.XXXX - XXXX XXXX, Added XXXX in XXXX for thread: XX, XXXX exists: XXX"

# 分步拆分前四列(每次仅拆分第一个空格)
col1, rest_content = log_line.split(' ', 1)
col2, rest_content = rest_content.split(' ', 1)
col3, rest_content = rest_content.split(' ', 1)
col4, rest_content = rest_content.split(' ', 1)

# 通过固定分隔符` - `拆分第五列和第六列
col5, col6 = rest_content.split(' - ', 1)

columns = (col1, col2, col3, col4, col5, col6)
print("分割结果:")
for idx, col in enumerate(columns, 1):
    print(f"列{idx}:{col}")

内容的提问来源于stack exchange,提问作者TaborlinTheGreat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 07:10:20