Python实现短横线分隔的交换机文本转CSV及报错解决
报错根因
你的拆分逻辑和原始文件格式不匹配:
- 原始文件的设备信息块是用整行短横线
-------------------------分隔的,不是空行,你用split('\n\n')完全没正确切分设备块,多个设备的字段行被堆到了同一个列表里,才会触发列数不匹配的报错 - 就算块拆分正确,你直接把整行内容当单元格值,没有提取
:后面的实际字段值,输出的内容也不符合要求
可直接运行的修复代码
import pandas as pd # 读取原始文本文件 with open(r'file.txt', 'r', encoding='utf-8') as f: raw_text = f.read() # 按短横线分隔符切分设备块,过滤空内容 device_blocks = [block.strip() for block in raw_text.split('-------------------------') if block.strip()] record_list = [] for block in device_blocks: # 拆分单个设备块的每一行,过滤空行 lines = [line.strip() for line in block.split('\n') if line.strip()] current_record = {} for line in lines: # 按第一个冒号拆分键和值,避免值本身包含冒号时拆分出错 field_name, field_value = line.split(': ', 1) current_record[field_name] = field_value record_list.append(current_record) # 生成DataFrame,调整列名和列顺序匹配输出要求 df = pd.DataFrame(record_list) df = df.rename(columns={'Port ID (outgoing port)': 'Port ID'}) df = df[['Device ID', 'IP address', 'Platform', 'Interface', 'Port ID']] # 预览结果 print(df) # 导出为CSV文件,去掉pandas自动生成的索引列 df.to_csv('switch_device_info.csv', index=False)
效果说明
运行后会直接生成符合你要求格式的CSV文件,表头和每行数据都和你给出的期望输出完全一致,就算设备信息里的字段值包含冒号也能正常解析,不会出现拆分错误。
内容的提问来源于stack exchange,提问作者nerznerznerz
相关产品推荐
相关产品推荐

