3

次のようなテキスト ファイルがある場合:

FastEthernet3/1
ip address 0.0.0.0
enable portfast

FastEthernet3/2
ip address 0.0.0.0
enable portfast

FastEthernet3/3
ip address 0.0.0.0

FastEthernet3/4
ip address 0.0.0.0

そして、PortFast を有効にしていないインターフェイスを出力したいと思います。これをpythonで印刷するにはどうすればよいですか?

私は次のコードを持っています:

import os
import sys

root = "path to text file like the example above"

os.chdir(root)

current2 = os.getcwd()

print ("CWD = ", current2,"\n")


file = sys.argv[1]

f = open(file)
contents = f.read()
f.close()
print ("Number of GigabitEthernet:",contents.count("interface GigabitEthernet"))
print ("Number of FastEthernet:",contents.count("FastEthernet"))


x = open(file)
string1 = "enable portfast"
for line in x.readlines():
    if line.startswith(string1)
        print (line)
filehandle.close()

ポートファストが有効になっている行を見つけて印刷できますが、より多くの行を印刷したいので、魔女のインターフェイスでポートファストが有効になっていることがわかります。

4

6 に答える 6

2

空白行の分離に基づくインターフェースによる分割:

import re
pinterfaces = re.compile("\r?\n\r?\n").split(contents)
# pinterfaces = ['FastEthernet3/1...', 'FastEthernet3/2...', ...]
for pinterface in pinterfaces:
  if "enable portfast" in pinterface:
    print pinterface

FastEthernet3/1
ip address 0.0.0.0
enable portfast
FastEthernet3/2
ip address 0.0.0.0
enable portfast
于 2012-09-20T11:29:06.810 に答える
2

すべてのインターフェイス定義が string で始まる場合、その文字列"FastEthernet"で分割できcontentsます。

interfaces = contents.split("FastEthernet"):
for interface in interfaces:
    if "enable portfast" in interface:
        print "FastEthernet" + interface

編集:アレクサンダーのソリューションに基づいて、インターフェイスを区切る空白行が常にある場合は、次のinterfacesように宣言するだけです:

interfaces = contents.split("\n\n")

...そして、printステートメントをprint interfaceonlyに変更します。

于 2012-09-20T11:19:49.907 に答える
2

ファイルに戻る方法はないため、最善の解決策は、前の行を追跡し、portFast が一致したときにそれらを出力することです。

ソリューションを含めるように編集: (アレクサンダーの功績)

import re
pinterfaces = re.compile("\r?\n\r?\n").split(contents)
# pinterfaces = ['FastEthernet3/1...', 'FastEthernet3/2...', ...]
for pinterface in pinterfaces:
  if "enable portfast" in pinterface:
    print pinterface
于 2012-09-20T11:16:09.383 に答える
0

アレクサンダーへのThnxは現在動作しています:)唯一のことは、私のテキストファイルが例と少し異なっていたことです。次のように見えました。

FastEthernet3/1
ip address 0.0.0.0
enable portfast
!
FastEthernet3/2
ip address 0.0.0.0
enable portfast
!
FastEthernet3/3
ip address 0.0.0.0
!
FastEthernet3/4
ip address 0.0.0.0

だから私はテを交換してもらいました!最初に空白を入れてから、それが機能しました:)

import re
contents2 = contents.replace("!","")
pinterfaces = re.compile("\n\n").split(contents2)
# pinterfaces = ['FastEthernet3/1...', 'FastEthernet3/2...', ...]
for pinterface in pinterfaces:
  if "enable portfast" in pinterface:
    print (pinterface)
于 2012-09-20T12:28:26.743 に答える
0
with open('test.txt', 'r') as in_file:
    lines = in_file.readlines()

for i,v in enumerate(lines):
    #print i,v
    if v.strip() == 'enable portfast':
        print lines[i-2].strip()
        print lines[i-1].strip()
        print lines[i].strip()

これは出力します:

FastEthernet3/1
ip address 0.0.0.0
enable portfast
FastEthernet3/2
ip address 0.0.0.0
enable portfast
于 2012-09-20T11:28:11.783 に答える
-1

次のように、すべてのデバイスを辞書の配列に個別に解析してみてください。

[{"device_name":"FastEthernet/1","address":"1.0.0.0", "portfast": True}]

次に、このハッシュをループして、値を持つアイテムのデバイス名を出力できportfastます。

于 2012-09-20T11:13:58.583 に答える