2017-04-26 2 views
-1

私は非常にPythonの新版です。以下のファイルを実際に出力してください。実際に私は何を達成するために何Pythonは出力を印刷するためにテキストファイルを扱います

NIC: 
    Name: eth0 
    ID: 0 1 
    Dynamic MAC Addr: 00:00:00:00:00:01 
    Preference: NONE 

    Ethernet Interface: 
     Name: prod 
     Default Network: Yes 
     VLAN ID: 2 
     Operational VLAN: SWA 
     Config Qual: N/A 

     Name: dev 
     Default Network: No 
     VLAN ID: 3 
     Operational VLAN: SWA 
     Config Qual: N/A 

    Name: eth1 
    Fabric ID: 1 0 
    Dynamic MAC Addr: 00:00:00:00:00:11 
    Preference: NONE 
    Ethernet Interface: 
     Name: prod 
     Default Network: Yes 
     VLAN ID: 2 
     Operational VLAN: SWB 
     Config Qual: N/A 

     Name: dev 
     Default Network: No 
     VLAN ID: 3 
     Operational VLAN: SWB 
     Config Qual: N/A 
  1. は私が持っているどのように多くのインターフェース見つける必要がある:以下

    はファイルです。上記の場合、eth0とeth1。私はeth0のを確認したい

  2. がIDにeth0の0 1

  3. を持って、私は、私は、名前PRODが存在するとVLAN ID 2は、PRODおよびデフォルトネットワークのためですはいeth0の

  4. であるかどうかを確認する必要がありますName devが存在し、vlan ID 3がdevで、Default Networkがnoであるかどうかを確認する必要があります。

同様に、すべてのインタフェースに対してです。私は通常eth0 - 20を出力します。私はこの、それは法の下に使用して動作させることができますが、コードの下にフィールドが入れ替わっている場合は、それが動作文句を言わないので、正しいのではないを達成するために、これまで試したどのような

。私が実際にやって何

はeth0のを発見し、その上VAR 1、VAR2、VAR3とに値を下回るリダイレクトして、私の出力を取得するために、これらのVAR1、VAR2、VAR3を使用しています。

フィールドが交換されているときと、出力ファイルに余分なフィールドが追加されているときは、これは動作しません。

私はあなたが適切な方法でこれを達成するためにここに役立ちます必要

(コード以下の注意は、私がしようとしている一例です)。

from itertools import islice 
import string 
import re 
import os 
import sys 
a = "eth0" 
def silentremove(filename): # remove file 
    try: 
     os.remove(filename) 
    except OSError as e: # this would be "except OSError, e:" 
     if e.errno != errno.ENOENT: # errno.ENOENT = no such file or directory 
      raise # re-raise exception if a different error occurred 
file = "inputfile.txt" 
silentremove(file) 
with open("vnic1.txt") as f: # Remove empty lines 
    for line in f: 
     if not line.isspace(): 
      input_file = open('inputfile.txt', 'a') 
      sys.stdout = input_file 
      sys.stdout.write(line) 
      input_file.close() 
      sys.stdout = sys.__stdout__ 
d = {} 
count = 0 
with open('inputfile.txt') as f: 
    for line in f: 
     if (re.search(a, line, re.IGNORECASE)): 
     var1, var2, var3, var4, var5,var6,var7,var8,var9,var10,var11,var12,var13, var14, var15, var16 = islice(f, 16) 
     key, value = var1.strip().split(":", 1) 
     d[key] = value 
     ideth0 = "0 1" 
     if (re.search(ideth0, value, re.IGNORECASE)): 
      count +=1 
     key, value = var5.strip().split(":", 1) 
     d[key] = value 
     name = "prod" 
     if (re.search(name, value, re.IGNORECASE)): 
      count +=1 
     if count == 2: 
      print "Working" 
      print "Status-{}:".format(a) 
      print " ID Name" 
      print " {} {}".format(ideth0, name) 

     else: 
      print "Failed" 
+0

これはヤムのようですlファイルを読み込むためにyamlリーダーを使用してみませんか?たとえば、[ 'PyYAML'](http://pyyaml.org) – smac89

答えて

1

テキストはラYAMLを見えますが、そうではありませんが、それはあなたがないかもしれません。この

{ 
    'NIC': [ 
     {'Dynamic MAC Addr': '00:00:00:00:00:01', 
     'Ethernet Interface': [{'Config Qual': 'N/A', 
           'Default Network': True, 
           'Name': 'prod', 
           'Operational VLAN': 'SWA', 
           'VLAN ID': 2}, 
           {'Config Qual': 'N/A', 
           'Default Network': False, 
           'Name': 'dev', 
           'Operational VLAN': 'SWA', 
           'VLAN ID': 3}], 
     'ID': '0 1', 
     'Name': 'eth0', 
     'Preference': 'NONE'}, 
     {'Dynamic MAC Addr': '00:00:00:00:00:11', 
     'Ethernet Interface': [{'Config Qual': 'N/A', 
           'Default Network': True, 
           'Name': 'prod', 
           'Operational VLAN': 'SWB', 
           'VLAN ID': 2}, 
           {'Config Qual': 'N/A', 
           'Default Network': False, 
           'Name': 'dev', 
           'Operational VLAN': 'SWB', 
           'VLAN ID': 3}], 
     'Fabric ID': '1 0', 
     'Name': 'eth1', 
     'Preference': 'NONE'} 
    ] 
} 

のようなデータに何かを持っているでしょうこのよう

with open("vnic1.txt") as f: 
    data = f.read() 
# makeing it yaml-string 
data = dat.replace(" Name","- Name") # the 2 spaces are intended 
import yaml 
data = yaml.load(data) # you now have the entire structure as a huge dict, profit 

可能性があり何を求めているのですか?間違いなくナビゲートするのはずっと簡単です(少なくともセクションは正確に区切られています)

+0

は私がこれと感謝をたくさん試してみましょう – gopinara

関連する問題