显示接口说明cisco to txt < ->csv python

mm9b1k5b  于 2022-12-06  发布在  Python
关注(0)|答案(1)|浏览(127)

我试图从一个txt文件转换为另一个csv文件,但为什么不能做我需要怎么样。
我收到了以下文本:

Interface                      Status         Protocol Description
Gi1                            up             up       MANAGEMENT INTERFACE - DON'T TOUCH ME
Gi2                            up             up       Network Interface
Gi2.101                        up             up       mpls-subinterface-CKTx904949
Gi3                            admin down     down     Network Interface
Lo0                            up             up       
Lo56                           up             up       THIS IS A TEST LOOPBACK
Vi0                            up             up

这是我剧本:

output = open("command.txt", "r")
for line in output.readlines():
    lista = re.sub(r'\s{2,}', ";", line)
    archivo_csv = open("output-1.txt", "a")
    archivo_csv.write(lista + ";" + "\n")
    archivo_csv.close()
output.close()

output = open("output.txt", "r+")         #This second "loop" is becose between "Protocol" 
lineas =  output.readlines()              #and "Description" be only one space, the regular 
linea_1 = lineas[0]                       #expression that i did don't work for this case
lista = re.sub(r'\s+', ";", linea_1)

output.seek(0)
output.write(lista)
output.close()

vaciar_archivo = open("output.csv", "w")
vaciar_archivo.close()

output = open("output.txt", "r")
for line in output.readlines():
    lista = line
    archivo_csv = open("output.csv", "a")
    archivo_csv.write(lista)
    archivo_csv.close()
output.close()

输出如下:

Interface;Status;Protocol;Description;
;
Gi1;up;up;MANAGEMENT INTERFACE - DON'T TOUCH ME
;
Gi2;up;up;Network Interface
;
Gi2.101;up;up;mpls-subinterface-CKTx904949
;
Gi3;admin down;down;Network Interface
;
Lo0;up;up;;
Lo56;up;up;THIS IS A TEST LOOPBACK
;
Vi0;up;up;;

我做不好,我想我对正则表达式的形式有问题。
我需要这样做,以便CSV文件不会生成空行:

Interface;Status;Protocol;Description
Gi1;up;up;MANAGEMENT INTERFACE - DON'T TOUCH ME
Gi2;up;up;Network Interface
Gi2.101;up;up;mpls-subinterface-CKTx904949
Gi3;admin down;down;Network Interface
Lo0;up;up
Lo56;up;up;THIS IS A TEST LOOPBACK
Vi0;up;up

你能帮我改进我的代码吗?

cedebl8k

cedebl8k1#

您可以尝试pandas.read_fwf

import pandas as pd

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

df["Description"] = (
    df.iloc[:, 3:].fillna("").astype(str).apply(" ".join, axis=1).str.strip()
)
df = df.iloc[:, :4]

print(df)
df.to_csv("data.csv", index=False, sep=";")

印刷品:

Interface      Status Protocol                            Description
0       Gi1          up       up  MANAGEMENT INTERFACE - DON'T TOUCH ME
1       Gi2          up       up                      Network Interface
2   Gi2.101          up       up           mpls-subinterface-CKTx904949
3       Gi3  admin down     down                      Network Interface
4       Lo0          up       up                                       
5      Lo56          up       up                THIS IS A TEST LOOPBACK
6       Vi0          up       up

并将data.csv

Interface;Status;Protocol;Description
Gi1;up;up;MANAGEMENT INTERFACE - DON'T TOUCH ME
Gi2;up;up;Network Interface
Gi2.101;up;up;mpls-subinterface-CKTx904949
Gi3;admin down;down;Network Interface
Lo0;up;up;
Lo56;up;up;THIS IS A TEST LOOPBACK
Vi0;up;up;

相关问题