2017-08-04 7 views
0

私はスイッチのインターフェイス構成であるテキストファイルを持っています。私は設定から​​いくつかの行を抜き出し、csvに出力したいと思います。任意のヘルプが評価されます出力ネットワークのスイッチ構成txtからcsv複数の列

以下の私のコードは、各文字をそれ自身の列に出力します。ランニング後のcsvファイルの画像:http://i.imgur.com/hmndZwQ.png

import csv 
import sys 

txt_file = r"results.txt" 
csv_file = r"testBook.csv" 

csv_out = open(csv_file, "w") 

in_txt = open(txt_file, "r") 

out_csv = csv.writer(csv_out) 


arr = [] 

for line in in_txt: 
    arr.append(line) 


out_csv.writerows(arr) 




csv_out.close() 

テキストファイルを使用:

ファイル名:172.16.0.11.txt

interface 0/1 traffic-shape 5 description 'testname' switchport mode trunk switchport trunk native vlan 20 switchport trunk allowed vlan 2-3,20,52 ip access-group mbps25 in 1 exit interface 0/2 description 'testname5' switchport mode trunk exit interface 0/3 speed 1000 full-duplex switchport mode access switchport access vlan 2 exit

私は近くに何かの出力を取得したいと思いますこれは:http://i.imgur.com/1lb9R6D.png

内訳:

(それが記述されている場合)IP列はインタフェース列が記述欄がそこから移入なるインターフェイス番号

から移入なる

172.16.0.11.txtファイル名から移入なる

スイッチは情報をインタフェース(それは、トラフィックの形状を有する場合)トラフィック状列がそこから移入なる

は情報をインタフェース

IPアクセスグループの列は、そのから移入であろう(それはアクセス・グループがある場合)の情報をインタフェース

+0

まず、試したことを示す必要があります。現時点では、このサイトでうまく受信されていないコード*の質問を私に渡しています。それを改善する方法を知るために[ask]をお読みください。 –

答えて

0

質問:... CSVファイルに設定して出力することから数行を引き出す

#     keyword : (fieldname, from, to) 
D = OrderedDict([('_', ('Switch IP',)), 
       ('interface',('Interface', 1, 2)), 
       ('description', ('Description', 1, 2)), 
       ('traffic-shape', ('Traffic-Shape', 1, 2)), 
       ('ip', ('IP Access-Group', 2, 5))]) 

with open(filename + ".txt") as txt_file, open('testBook.csv', 'w') as csv_file: 
    # Build Fieldnames from D 
    fieldnames = [D[d][0] for d in D] 
    writer = csv.DictWriter(csv_file, fieldnames=fieldnames) 
    writer.writeheader() 

    # Init CSV Record 
    record = {fieldnames[0]: filename} 

    while True: 
     line = txt_file.readline()[:-1] 
     if not line: break 

     words = line.split() 

     # Write CSV Record if 'exit' 
     if words[0] == 'exit': 
      writer.writerow(record) 
      record = {fieldnames[0]:filename} 
     else: 
      try: 
       # Get Keyword Setting from D 
       k = D[words[0]] 
       # Update CSV Record 'fieldname' with Slice(from,to) 
       record[k[0]] = ' '.join(words[k[1]:k[2]]) 
      except: 
       pass 

出力

Switch IP,Interface,Description,Traffic-Shape,IP Access-Group 
172.16.0.11,0/1,'testname',5,mbps25 in 1 
172.16.0.11,0/2,'testname5',, 
172.16.0.11,0/3,,, 

Pythonでテスト済み:3.4.2

+0

解決策、ありがとうございました! – glwallum

関連する問題