2017-12-15 27 views
0

私はCSVファイルにデータを書き込むために必要なPython辞書オブジェクトを持っています。私はPythonプログラミングには新しいです。だから私は誰かが私を導くことができるかどうか疑問に思っていた。csv.DictWriterを使用してCSVにデータを書き込む

ここは私のオブジェクトです。

dict = [{u'interface': [{u'interface-down-reason': u'LACP Convergence Timeout', 
        u'interface-name': u'ethernet28:1', 
        u'leaf-group': u'R2', 
        u'member-type': u'', 
        u'mode': u'lacp', 
        u'op-state': u'down', 
        u'phy-state': u'up', 
        u'switch-name': u'R2L2'}, 
       {u'interface-down-reason': u'LACP Protocol Initiated', 
        u'interface-name': u'ethernet28:1', 
        u'leaf-group': u'R2', 
        u'member-type': u'', 
        u'mode': u'lacp', 
        u'op-state': u'down', 
        u'phy-state': u'up', 
        u'switch-name': u'R2L1'}], 
    u'name': u'LACP-Test'}, 
{u'interface': [{u'interface-down-reason': u'None', 
        u'interface-name': u'ethernet54:4', 
        u'leaf-group': u'R1', 
        u'member-type': u'', 
        u'mode': u'static-auto-vswitch-inband', 
        u'op-state': u'up', 
        u'phy-state': u'up', 
        u'switch-name': u'R1L1'}, 
       {u'interface-down-reason': u'None', 
        u'interface-name': u'ethernet54:4', 
        u'leaf-group': u'R1', 
        u'member-type': u'', 
        u'mode': u'static-auto-vswitch-inband', 
        u'op-state': u'up', 
        u'phy-state': u'up', 
        u'switch-name': u'R1L2'}], 
    u'name': u'LAX-K8-MASTER-NODE'}] 

ご覧のとおり、複数のキー値のペアで構成され、一部のキーには辞書のリストがあります。

私は挑戦が、いくつかのフィールド名がキー「インターフェイス」の辞書内にあるあるしかし、私は

export_fields = ['name','interface-name', 'op-state', 'phy-state'] 

以下のようにフィールド名を含める、csv.Dictwiterを読んでてきました。

どのように私はこれを分離するので、私はCSVファイルに書き込むことができます。

誰かが論理を共有したり、私を導くことができれば、そこから取り出すことができます。

あなたの応答を感謝します。

+0

'csv.DictWriter'を使用するためには、考えて、構造化データを提供しました既存のデータを入れ子のない単純な辞書のリストに変換する必要があります。 – larsks

答えて

1

翻訳レイヤーを追加せずに、ネストされた構造体を使用して2Dテーブルのデータを書き込むことはできません。Pythonは要素の検索場所や入れ子の影響を認識しません。あなたは手動であなたのケースではかなり単純である、書くためにどのようなことを指示する必要があり

data = [{u'interface': [{u'interface-down-reason': u'LACP Convergence Timeout', 
         u'interface-name': u'ethernet28:1', 
         u'leaf-group': u'R2', 
         u'member-type': u'', 
         u'mode': u'lacp', 
         u'op-state': u'down', 
         u'phy-state': u'up', 
         u'switch-name': u'R2L2'}, 
         {u'interface-down-reason': u'LACP Protocol Initiated', 
         u'interface-name': u'ethernet28:1', 
         u'leaf-group': u'R2', 
         u'member-type': u'', 
         u'mode': u'lacp', 
         u'op-state': u'down', 
         u'phy-state': u'up', 
         u'switch-name': u'R2L1'}], 
     u'name': u'LACP-Test'}, 
     {u'interface': [{u'interface-down-reason': u'None', 
         u'interface-name': u'ethernet54:4', 
         u'leaf-group': u'R1', 
         u'member-type': u'', 
         u'mode': u'static-auto-vswitch-inband', 
         u'op-state': u'up', 
         u'phy-state': u'up', 
         u'switch-name': u'R1L1'}, 
         {u'interface-down-reason': u'None', 
         u'interface-name': u'ethernet54:4', 
         u'leaf-group': u'R1', 
         u'member-type': u'', 
         u'mode': u'static-auto-vswitch-inband', 
         u'op-state': u'up', 
         u'phy-state': u'up', 
         u'switch-name': u'R1L2'}], 
     u'name': u'LAX-K8-MASTER-NODE'}] 

# on Python 3.x use: open("output.csv", "wt", endline="") 
with open("output.csv", "wb") as f: # open output.csv for writing 
    writer = csv.writer(f) # create a CSV writer 
    writer.writerow(['name', 'interface-name', 'op-state', 'phy-state']) # write the header 
    for endpoint in data: # loop through your data 
     name = endpoint["name"] 
     for it in endpoint["interface"]: # loop through all interfaces 
      writer.writerow([name, it["interface-name"], it["op-state"], it["phy-state"]]) 
+0

お世話になりました。 – lax123

関連する問題