之前我已经打开过这个主题:Append continuous data to the same row using CSV lib, in Python
有人为我提出了一个解决方案,这个解决方案效果很好。该代码表明它的工作原理如下:
import csv
filewrite.writerow(['Hostname', 'Config-Error', 'Config-Error'])
with open(outputfile, 'a') as csvfile:
filewrite = csv.writer(csvfile, delimiter=',', quoting=csv.QUOTE_MINIMAL)
row = [hostname]
if (CiscoSyslog == 0):
row.append('Syslog')
if (CiscoSNMP == 0):
row.append('SNMP')
filewrite.writerow(row)
输出符合要求:
hostname,Config-Error,Config-Error
router1,Syslog
router2,SNMP
router3,Syslog,SNMP
现在,我的下一个问题是,您如何将附加数据添加到一行,并将其排序为属于某一列?例如,我想在顶部的两列上说“Config-Error”,而不是在顶部的一列说SyslogError,而另一列是SNMPError,所以它看起来像:
hostname,SyslogError,SNMPError
router1,Syslog, ,
router2, ,SNMP
router3,Syslog,SNMP
我的最终目标是匹配将在配置中找到的错误,将其附加到CSV文件,并在正确的列上对其进行排序。我甚至不确定如何“谷歌搜索”这个,所以我决定在这里提出问题。
我对python还是一个新手,但到目前为止学习很有趣。
提前谢谢!
尤
答案 0 :(得分:0)
答案很简单,它在我眼中“盯着”。 :)
基本上,我摆脱了“if”语句,其中数据附加在一行下。我还包括了一些我的代码,所以它完全有道理,以防有人在寻找类似谜题的答案。
所以...我设置标志以“是”开头(正如您在代码中看到的那样)。如果找不到每个变量(Syslog,SNMP和Tacacs)的某些语句,它们都将保持设置为“Yes”。我执行“re.search”方法,如果它在配置下找到语句,则将其标记为“No”,因此不需要将其打印到输出文件(或者换句话说,配置存在,所以有“No”配置错误)。对于仍然保留为“是”的任何标志,我每次打印出每个“标志”(在这种情况下为变量)按顺序,这样它就会进入正确的列< /强>
以下是代码:
import csv
import re
Syslog = 'logging 1.1.1.1'
SNMP = 'snmp-server host 2.2.2.2'
Tacacs = 'tacacs-server host 3.3.3.3'
filewrite.writerow(['Hostname', 'SyslogError', 'SNMPError', 'TacacsError'])
with open(file, 'r') as inFile:
SyslogFlag = 'Yes'
SNMPFlag = 'Yes'
TacacsFlag = 'Yes'
for line in inFile:
if re.search(Syslog, line):
SyslogFlag = 'No'
if re.search(SNMP, line):
SNMPFlag = 'No'
if re.search(Tacacs, line):
TacacsFlag = 'No'
if (SyslogFlag == 'No') and (SNMPFlag == 'No') and (TacacsFlag == 'No'):
print "No Config errors"
else:
with open(outputfile, 'a') as csvfile:
filewrite = csv.writer(csvfile, delimiter=',', quoting=csv.QUOTE_MINIMAL)
row = [hostname]
row.append(SyslogFlag)
row.append(SNMPFlag)
row.append(TacacsFlag)
filewrite.writerow(row)
这是输出:
Hostname,SyslogError,SNMPError,TacacsError
router1,Yes,No,No
router2,No,Yes,No
router3,Yes,Yes,No