簡體   English   中英

使用Python解析Fortigate配置文件

[英]Parsing a Fortigate config file with Python

我基本上是試圖繼續這個關於解析配置文件的未回答的問題。

使用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。 問題在於每個記錄可以具有可變數量的行,並且縮進顯示前一行的小節。 另一篇文章確實正確地獲得了其中的一部分,但它不處理縮進。 我想出了一些用任意字符替換空格的解決方法,但是我不知道是否有一種方法可以讀取數字制表符/空格並將其用於指示位置。

謝謝

因此,我設法閱讀了您的文本並將其轉換為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()

這將產生一個字典,然后將允許您進行如下調用:

>>> data[1]['nat']
'enable'
>>> data[1].keys()
['nat', 'service', 'schedule', 'central-nat', 'srcaddr', 'av-profile', 'dstintf', 'srcintf', 'action', 'dstaddr', 'utm-status']

因此,現在可以生成一個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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM