2

ネットワークルームの文書化に役立つスクリプトを書いています。

そのスクリプトの背後にある考え方は、部屋はリストであり、ラックのいくつかのリストが含まれているということです。ラックリストには、サーバー/スイッチなどを含むモジュールと呼ばれるリストが含まれています。モジュールリストには、ケーブル番号が記載された実際のポートがあります。

例えば:

[04/02, [MM02, [1, #1992, 2, #1993, 3, #1567 ....], MM03, [1, #1234 .....]], 04/03, [MM01, .........]]]

04/02=最初のラック

MM02=そのラックの最初のモジュール

1=ポート番号

#1992=ケーブル番号

私はあなたがその考えを理解することを望みます。

私が書いたスクリプトは、部屋リストのケーブル番号を比較し、重複があるかどうかを調べます。ここで注意が必要です。次に、ケーブル番号を他のポートのラックとモジュールに置き換える必要があります。モジュールとラックはポートを含むリストの最初の要素であるため、これは非常に簡単なはずですが、情報にアクセスする方法がわかりません。(私はプログラミングの初心者です)

4

2 に答える 2

1

コメントで述べたように、ここで使用するより優れたデータ構造は、ネストされたdictsです。

data = {
    "04/02": {
        "MM02": {1: "#1992", 2: "#1993", 3: "#1567", ...},
        "MM03": {1: "#1234", ...},
        ... 
    },
    "04/03": {
        "MM01": ...
        ...
    },
    ...
}

次にdata["04/02"]["MM02"] = {1: "#1992", 2: "#1993", 3: "#1567", ...}、値を置き換えるだけですが、サブ辞書を手動で作成する必要があるという欠点があります。ただし、この問題には次のような解決策があります。

from functools import partial
from collections import defaultdict

tripledict = partial(defaultdict, partial(defaultdict, dict))
mydict = tripledict()
mydict['foo']['bar']['foobar'] = 25

これらは、読みやすさと使いやすさだけでなく、アクセス速度にも利点があります。

于 2012-04-20T12:58:11.117 に答える
0

これが、探している Python クラスです。それは非常に簡単なので、あなたが初心者であり、学びたいと言うなら、コードを読んで理解してください。
機能を示すために、いくつかの行の例が下部に示されています。複数のラックの場合は、Rack() のリストを作成するだけです。幸運を。

class Rack():
    def __init__(self, name):
        self.name = name
        self.modules = dict() 

    # port_cable_list should be in the form:
    # [(1, #1992), (2, #1993), (3, #1567)] 
    def add_module(self, name, port_cable_list):
        self.modules[name] = dict()
        for port, cable in port_cable_list:
            self.modules[name][port] = cable

    def remove_module(self, name):
        if name in self.modules:
            del self.modules[name]

    def add_port(self, module_name, port, cable):
        if module_name not in self.modules:
            self.modules[module_name][port] = cable
            return True
        return False

    def remove_port(self, module_name, port):
        if module_name in self.modules:
            if port in self.modules[module_name]:
                del self.modules[module_name][port]
                return True
            else:
                return False
        return False

    def module_exists(self, module_name):
        return module_name in self.modules

    def port_exists_in_module(self, module_name, port):
        if self.modules[module_name]:
            return port in self.modules[module_name]
        return False

    def print_module(self, module_name):
        if self.module_exists(module_name):
            print "%s\nPort\tCable" % (module_name)
            for port, cable in self.modules[module_name].items():
                print port, "\t", cable
            print
            return True
        return False

    def print_rack(self):
        print self.name + ':'
        for module_name in self.modules.keys():
            self.print_module(module_name)

SomeRack = Rack('04/02')
SomeRack.add_module("MM02", [(1, '#1992'), (2, '#1993'), (3, '#1567')])
SomeRack.add_module("MM03", [(1, '#1234')])
SomeRack.print_module("MM03")
SomeRack.print_rack()
SomeRack.remove_module("MM03")
print SomeRack.module_exists("MM03")
SomeRack.print_rack()
于 2012-04-20T14:14:13.640 に答える