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

如何清理LFT命令输出文本并转为正确JSON格式(Python)

解决LFT日志文本转JSON时字段拆分错误的问题

问题根源

LFT生成的文本里,地址段/服务商字段可能包含空格(比如带空格的服务商名称),直接用空格分割会把该字段拆成多个部分,导致后续字段(如延迟)错位混乱。

解决方法

方法1:正则表达式精准匹配(推荐)

用正则捕获每行固定格式的字段,避开空格分割的歧义。假设LFT日志格式类似:

1 [AS1234] China Telecom 192.168.1.1 10ms

代码示例:

import re
import json

# 根据实际LFT输出调整正则规则
pattern = r'^(\d+)\s+\[([^\]]+)\]\s+(.+?)\s+(\d+\.\d+\.\d+\.\d+)\s+(\d+ms)$'

data_list = []
with open('lft_output.txt', 'r') as f:
    for line in f:
        line = line.strip()
        if not line:
            continue
        match_result = re.match(pattern, line)
        if match_result:
            hop, asn, provider, target_ip, delay = match_result.groups()
            data_list.append({
                'Hop': hop,
                'ASN': asn,
                'Provider': provider.strip(),
                'TargetIP': target_ip,
                'Delay': delay
            })

# 写入JSON文件
with open('lft_result.json', 'w') as f:
    json.dump(data_list, f, indent=2)

方法2:Pandas结合正则提取字段

如果习惯用Pandas处理,可通过正则直接从每行文本中提取字段:

import pandas as pd

# 读取原始文本,暂不分割
df = pd.read_csv('lft_output.txt', sep='\t', header=None, names=['raw_content'])

# 正则提取各字段
df[['Hop', 'ASN', 'Provider', 'TargetIP', 'Delay']] = df['raw_content'].str.extract(
    r'^(\d+)\s+\[([^\]]+)\]\s+(.+?)\s+(\d+\.\d+\.\d+\.\d+)\s+(\d+ms)$'
)

# 清理无效行
df = df.dropna(subset=['Hop'])

# 转换为JSON
df[['Hop', 'ASN', 'Provider', 'TargetIP', 'Delay']].to_json(
    'lft_pandas_result.json', orient='records', indent=2
)

方法3:单独处理异常行

如果仅前两行存在拆分问题,可针对性修复后再统一处理:

import pandas as pd
from io import StringIO

# 读取所有有效行
with open('lft_output.txt', 'r') as f:
    lines = [line.strip() for line in f if line.strip()]

# 处理前两行(假设服务商字段含空格)
fixed_lines = []
for line in lines[:2]:
    parts = line.split()
    hop = parts[0]
    asn = parts[1].strip('[]')
    # 合并中间的服务商字段
    provider = ' '.join(parts[2:-2])
    target_ip = parts[-2]
    delay = parts[-1]
    fixed_lines.append(f"{hop} [{asn}] {provider} {target_ip} {delay}")

# 合并处理后的行与剩余行
fixed_lines.extend(lines[2:])

# Pandas读取处理后的内容
df = pd.read_csv(
    StringIO('\n'.join(fixed_lines)),
    sep=r'\s+(?=\[|\d+\.)',
    engine='python',
    header=None,
    names=['Hop', 'ASN', 'Provider', 'TargetIP', 'Delay']
)

# 清理ASN字段的括号
df['ASN'] = df['ASN'].str.strip('[]')

# 转存为JSON
df.to_json('lft_fixed.json', orient='records', indent=2)

关键提示

  • 先确认LFT日志的实际格式,调整正则或分割逻辑,确保每个字段被正确捕获。
  • 若服务商字段是唯一歧义点,正则中用.+?非贪婪匹配该字段,直到遇到固定格式的目标IP。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 03:01:01