用Python解析Fortigate配置文件

2024-10-01 13:42:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我基本上是想继续这个关于解析fortigate配置文件的未回答的问题。在

Reading a fortigate configuration file with Python

根本问题是这个配置包含很多这样的记录

edit 1
    set srcintf "port26"
    set dstintf "port25"
        set srcaddr "all"             
        set dstaddr "all"             
    set action accept
    set utm-status enable
    set schedule "always"
        set service "ANY"             
    set av-profile "default"
    set nat enable
    set central-nat enable
next

我想在一行上得到每个acl的输出,这样我就可以将它们导入到CSV中。问题是每个记录可以有可变的行数,缩进显示前一行的子部分。另一篇文章确实得到了一些正确的信息,但是它不能处理缩进。我已经想出了一些解决方法,可以用任意字符替换空白,但我不知道是否有一种方法可以读取数字制表符/空格并使用它来指示位置。在

谢谢


Tags: 方法enable配置文件with记录alleditnat
1条回答
网友
1楼 · 发布于 2024-10-01 13:42:40

因此,我已经成功地阅读了您的文本,并将其转换为python语言的词典。这很简单。你基本上要做的事情是:

conFigFile=open('./config.txt')

data=dict()
record=0

for line in conFigFile:
    if line.find('edit')>=0:
        record=int(line.replace('edit',''))
        data[record]={}
    if line.find('set')>=0:
        line=line.replace('set','')
        line=line.strip()
        print line
        key,val=line.split(' ')
        data[record][key]=val
conFigFile.close()

这将生成一个字典,允许您拨打以下电话:

^{pr2}$

因此,现在可以生成csv文件:

csvFile=open('./data.csv','w')
records=data.keys()
for record in records:
    values=data[record].keys()
    valList=['Record',str(record)]
    for val in values:
        valList.append(val)
        valList.append(data[record][val])
    csvFile.write(",".join(valList))
csvFile.close()

生成csv文件:

Record,1,nat,enable,service,"ANY",schedule,"always",central-nat,enable,srcaddr,"all",av-profile,"default",dstintf,"port25",srcintf,"port26",action,accept,dstaddr,"all",utm-status,enable

如果您真的要计算行前的空格数,可以执行以下操作:

>>> a='     test: one     '
>>> a.count(' ') #count all spaces
11
>>> (len(a) - len(a.lstrip())) #count leading spaces
5

相关问题 更多 >