0

我在文件夹中有一些 cisco 配置文件。我编写了 for 循环来遍历每个配置文件并找到 vlan1 端口,如下所示。我检查了文件夹的权限和安全性,所有配置文件的文件都是一样的。具有讽刺意味的是,CiscoConfParse 可以打开、读取和生成某些配置文件的结果,但不能打开其他配置文件。如果我删除了它无法打开的配置文件,那么它会产生预期的结果。当我将该配置文件放回同一文件夹时,它无法打开并给出 [FATAL] filenotfound 错误。我在网上搜索并找到了一些建议的解决方案,例如执行 chkdsk /f /r 然后 sfc /scannow 来扫描和修复损坏的文件。我做了所有这些,但问题仍然存在。我希望有人以前解决过这个问题并提供帮助。谢谢

import os
import re
import csv
from ciscoconfparse import CiscoConfParse
def check_vlan1_ports():
    configs = (r'C:\Documents\Tutorials\Python\Scripts\NetworkAudit\Data')
    with open (r'c:\documents\result.csv', 'a', newline='') as csv_file:
        Header = ['Device', 'Rule', 'Exception', 'Status', 'Code', 'Severity', 'Reason']
        writer = csv.DictWriter(csv_file, fieldnames=Header)
        writer.writeheader()
    for config in os.listdir(configs):
        if config.endswith(".txt"):
            filename = os.path.split(config)

    #print(filename[1])
            parse = CiscoConfParse(config)
            vlan1 = parse.find_objects(r"^1\s+default.*")
            str_vlan1 = str(vlan1)
    #print(filename, vlan1)
            vlan1_ports = re.findall(r'(Gi\d{1,3}\/\d{1,3})|(Fa\d{1,3}\/\d{1,3})', str_vlan1)
            if (vlan1_ports):
                with open (r'c:\documents\result.csv', 'a', newline='') as \
                            csv_file:
                    writer = csv.DictWriter(csv_file, fieldnames=Header)
                    writer.writerow({'Device':filename[1], 'Rule': 1, 'Exception': \
                                 'Check Vlan1 ports', \
                                 'Status': 'Failed', 'Code': '1', 'Severity': 'High', \
                                 'Reason': vlan1_ports})
            else:
                with open (r'c:\documents\result.csv', 'a', newline='') as csv_file:
                    writer = csv.DictWriter(csv_file, fieldnames=Header)
                    writer.writerow({'Device':filename[1], 'Rule': 1, 'Exception': \
                                  Check Vlan1 ports', \
                                 'Status': 'Pass', 'Code': '1', 'Severity': 'High', \
                                 'Reason': 'No ports in vlan1'})
check_vlan1_ports()
4

0 回答 0