【问题标题】:Sort data in CSV file to which column it belongs to using CSV lib in Python 2.7在 Python 2.7 中使用 CSV lib 将 CSV 文件中的数据排序到它所属的列
【发布时间】:2016-11-24 19:44:37
【问题描述】:

之前我开过这个话题: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

现在,我的下一个问题是,您如何将附加的数据放到一行中,并将其排序为属于某一列?例如,我不想在顶部有两列说“配置错误”,而是在顶部的一列上说 SyslogError,另一列是 SNMPError,所以它看起来像:

hostname,SyslogError,SNMPError
router1,Syslog, ,
router2, ,SNMP
router3,Syslog,SNMP

我的最终目标是匹配将在配置中找到的错误,将其附加到 CSV 文件,并在正确的列上对其进行排序。我什至不知道如何“谷歌搜索”这个,所以我决定在这里提出这个问题。

我对 python 还是有点陌生​​,但是到目前为止学习很有趣。

提前谢谢你!

维克托

【问题讨论】:

  • 我想通了...我会在完成测试后分享我的答案...不过感谢大家的时间。

标签: python python-2.7 sorting csv


【解决方案1】:

答案很简单,就是在我眼里“盯着”。 :)

基本上,我摆脱了“if”语句,其中数据附加在一行下方。我还包含了一些我的代码,所以它完全有意义,以防有人正在寻找类似难题的答案。

所以...我将标志设置为以“是”开头(如您在代码中所见)。如果找不到每个变量(Syslog、SNMP 和 Tacacs)的某些语句,它们都保持设置为“是”。我执行“re.search”方法,如果它在配置下找到该语句,则将其标记为“否”,因此不需要将其打印到输出文件(或者换句话说,配置存在,因此存在“否”配置错误)。对于仍然保留为“是”的任何标志,我每次按顺序打印出每个“标志”(在这种情况下为变量),每次都以这种方式进入正确的列。

代码如下:

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

【讨论】:

    猜你喜欢
    • 2015-08-15
    • 1970-01-01
    • 1970-01-01
    • 2013-03-11
    • 1970-01-01
    • 2018-07-21
    • 2017-04-16
    • 2021-12-27
    • 1970-01-01
    相关资源
    最近更新 更多