我在文件夹中有一些 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()