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

Python处理网络设备接口TXT:删除指定行并转CSV

网络设备接口TXT文件清理与CSV转换

需求

处理网络设备接口信息的TXT文件,通过Python实现以下操作:

  • 读取文件,删除包含日期的行、空白行、横线分隔行
  • 保留有效接口数据后转换为CSV格式

此前尝试用Pandas的read_fwf方法结合正则删除行未成功,后续用循环+正则的代码也无法正常运行,以下是详细内容:

原始TXT内容

Wed Oct 12 12:53:38.816 EDT                                                      # 需要删除这行带日期的内容
                                                                                 # 需要删除这个空白行 
Interface          Status      Protocol    Description
-------------------------------------------------------------------------------- # 需要删除这行横线分隔的内容
Lo0                up          up          Loopback0 interface configured by Netmiko
Lo55               up          up          
Lo100              up          up          ***MERGE LOOPBACK 100****
Lo111              up          up          Configured by NETCONF
Nu0                up          up          
Mg0/RP0/CPU0/0     up          up          DO NOT TOUCH THIS !
Gi0/0/0/0          admin-down  admin-down  
Gi0/0/0/1          admin-down  admin-down  test
Gi0/0/0/1.100      admin-down  admin-down  
Gi0/0/0/2          admin-down  admin-down  Link to P2 configured by Netmiko
Gi0/0/0/3          up          up          Configured by Ansible !!!!!!!!
Gi0/0/0/4          up          up          Updated by Ansible using Jinja Template
Gi0/0/0/5          up          up          Configured by Ansible !!!!!!
Gi0/0/0/6          admin-down  admin-down  Updated by Ansible using Jinja Template
Gi0/0/0/6.11       admin-down  admin-down  

期望输出(清理后的TXT)

Interface          Status      Protocol    Description
Lo0                up          up          Loopback0 interface configured by Netmiko
Lo55               up          up          
Lo100              up          up          ***MERGE LOOPBACK 100****
Lo111              up          up          Configured by NETCONF
Nu0                up          up          
Mg0/RP0/CPU0/0     up          up          DO NOT TOUCH THIS !
Gi0/0/0/0          admin-down  admin-down  
Gi0/0/0/1          admin-down  admin-down  test
Gi0/0/0/1.100      admin-down  admin-down  
Gi0/0/0/2          admin-down  admin-down  Link to P2 configured by Netmiko
Gi0/0/0/3          up          up          Configured by Ansible !!!!!!!!
Gi0/0/0/4          up          up          Updated by Ansible using Jinja Template
Gi0/0/0/5          up          up          Configured by Ansible !!!!!!
Gi0/0/0/6          admin-down  admin-down  Updated by Ansible using Jinja Template
Gi0/0/0/6.11       admin-down  admin-down

尝试过的失败代码

Pandas方案

import pandas as pd

df = pd.read_fwf("file.txt")

df = df[~df[0:].str.contains("Wed")]

print(df)

问题:df[0:]是DataFrame切片,无法直接调用str.contains方法;仅匹配"Wed"无法覆盖所有日期格式,逻辑不完整。

循环正则方案

with open("output.txt", "r") as f:
    lines = f.readlines()

with open("output2.txt", "w") as f:
    for line in lines:
        if re.match(r"([A-Za-z0-9]+( [A-Za-z0-9]+)+)\-{5}\w", line):
            del line[line]
            f.write(line)

问题:正则表达式逻辑错误,无法匹配目标行;del line[line]写法完全错误,字符串不能通过该方式删除内容,且未导入re模块。

可行解决方案

方案1(MosGeo提供)

import re
import pandas as pd

with open("output.txt", "r") as f:
    lines = f.readlines()

new_lines = []
for line in lines:
    stripped_line = line.strip()
    # 跳过横线行(至少5个-)、空白行、日期行
    if not re.match(r"^-{5,}|^\s*$|^[A-Za-z]{3}\s[A-Za-z]{3}\s\d{2}", stripped_line):
        new_lines.append(stripped_line + "\n")

# 写入清理后的TXT
with open("cleaned_interfaces.txt", "w") as file:
    file.writelines(new_lines)

# 转换为CSV
df = pd.read_fwf("cleaned_interfaces.txt")
df.to_csv("interfaces.csv", index=False)

说明:优化正则表达式精准匹配需删除的行,先生成清理后的TXT,再用read_fwf读取并转换为CSV。

方案2(预编译正则版)

import re
import pandas as pd

# 预编译正则,匹配需删除的行:横线行、空白行、日期行
regex = re.compile(r"^-{5,}|^\s*$|^[A-Za-z]{3}\s[A-Za-z]{3}\s\d{2}")

with open("output.txt", "r") as f:
    lines = f.readlines()

with open("cleaned_interfaces.txt", "w") as fw:
    for line in lines:
        stripped_line = line.strip()
        if not regex.match(stripped_line):
            fw.write(stripped_line + "\n")

# 转换为CSV
df = pd.read_fwf("cleaned_interfaces.txt")
df.to_csv("interfaces.csv", index=False)

说明:预编译正则提升运行效率,逻辑更清晰,完整实现清理+转CSV的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 16:25:29