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