读取并解析文本文件到结构json文件 - 返回不需要的键和json文件中的空值/字典

2024-03-28 21:02:51 发布

您现在位置:Python中文网/ 问答频道 /正文

在这里找不到类似的问题。在将文件转换为json结构之后,我得到了null和不需要的dict。下面的脚本和文件。你知道吗

从raw1.txt文件中,首先删除特定的行/字符串,然后写入新文件清除.txt. 二读清除.txt文件并将其转换为json格式。你知道吗

能够运行它而不出错返回json文件(myjson.json文件)但是json数据的某些部分如何返回不需要的key/value/dict,如下所示。。你知道吗

{
    "items": [

    ]
  },
  {
    "items": [

    ]
  },
  {
    "items": [

    ]
  },
  {
    "items": [

    ]
  },
  {
    "items": [
      null
    ]
  }

…它可以在json文件的任何地方找到。。。。该问题是由于删除require行后仍存在多个空行。你知道吗

请在下面找到

原始文件(raw1.txt)


         OSPF Process 1 with Router ID 1.4.0.1
                         Area: 0.0.0.10
                 Link State Database


  Type      : Router
  Ls id     : 1.4.0.1
  Adv rtr   : 1.4.0.1
  Ls age    : 996
  Len       : 48
  Options   :  ASBR  E
  seq#      : 8000002f
  chksum    : 0xe7f5
  Link count: 2
   * Link ID: 1.16.9.9
     Data   : 10.1.155.2
     Link Type: P-2-P
     Metric : 100
   * Link ID: 10.1.155.20
     Data   : 255.255.255.252
     Link Type: StubNet
     Metric : 100
     Priority : Low

  Type      : Router
  Ls id     : 1.16.9.9
  Adv rtr   : 1.16.9.9
  Ls age    : 392
  Len       : 48
  Options   :  ABR  E
  seq#      : 8000001e
  chksum    : 0x3116
  Link count: 2
   * Link ID: 1.4.0.1
     Data   : 10.242.177.21
     Link Type: P-2-P
     Metric : 1
   * Link ID: 10.1.155.20
     Data   : 255.255.255.252
     Link Type: StubNet
     Metric : 1
     Priority : Low
                         Area: 0.0.0.13
                 Link State Database


  Type      : Router
  Ls id     : 1.4.0.2
  Adv rtr   : 1.4.0.2
  Ls age    : 1194
  Len       : 96
  Options   :  ASBR  E
  seq#      : 8001cf7b
  chksum    : 0xbfae
  Link count: 6
   * Link ID: 1.4.0.2
     Data   : 255.255.255.255
     Link Type: StubNet
     Metric : 0
     Priority : Medium
   * Link ID: 1.4.0.1
     Data   : 10.0.0.2
     Link Type: P-2-P
     Metric : 10
   * Link ID: 10.0.0.0
     Data   : 255.255.255.252
     Link Type: StubNet
     Metric : 10
     Priority : Low
   * Link ID: 10.40.8.0
     Data   : 255.255.255.252
     Link Type: StubNet
     Metric : 100
     Priority : Low
   * Link ID: 19.23.23.15
     Data   : 10.40.10.130
     Link Type: P-2-P
     Metric : 10
   * Link ID: 1.4.10.200
     Data   : 255.255.255.252
     Link Type: StubNet
     Metric : 10
     Priority : Low


  Type      : Router
  Ls id     : 100.100.0.10
  Adv rtr   : 100.100.0.10
  Ls age    : 171
  Len       : 84
  Options   :  ASBR  E
  seq#      : 8001a292
  chksum    : 0x5fa2
  Link count: 5
   * Link ID: 100.100.0.10
     Data   : 255.255.255.255
     Link Type: StubNet
     Metric : 12
     Priority : Medium
   * Link ID: 10.10.0.1
     Data   : 10.10.10.18
     Link Type: P-2-P
     Metric : 10
   * Link ID: 10.10.10.17
     Data   : 255.255.255.255
     Link Type: StubNet
     Metric : 10
     Priority : Medium
   * Link ID: 19.23.23.15
     Data   : 10.10.30.30
     Link Type: P-2-P
     Metric : 10
   * Link ID: 10.90.25.30
     Data   : 255.255.255.255
     Link Type: StubNet
     Metric : 10
     Priority : Medium

  Type      : Router
  Ls id     : 10.10.0.1
  Adv rtr   : 10.10.0.1
  Ls age    : 191
  Len       : 96
  Options   :  ASBR  E
  seq#      : 80013bcf
  chksum    : 0x9871
  Link count: 6
   * Link ID: 10.10.0.1
     Data   : 255.255.255.255
     Link Type: StubNet
     Metric : 12
     Priority : Medium
   * Link ID: 15.51.51.14
     Data   : 10.10.0.130
     Link Type: P-2-P
     Metric : 10
   * Link ID: 10.10.0.129
     Data   : 255.255.255.255
     Link Type: StubNet
     Metric : 10
     Priority : Medium
   * Link ID: 100.100.0.10
     Data   : 10.10.10.17
     Link Type: P-2-P
     Metric : 10
   * Link ID: 10.10.10.18
     Data   : 255.255.255.255
     Link Type: StubNet
     Metric : 10
     Priority : Medium
   * Link ID: 16.16.16.0
     Data   : 255.255.255.252
     Link Type: StubNet
     Metric : 10
     Priority : Low

  Type      : Router
  Ls id     : 15.51.51.14
  Adv rtr   : 15.51.51.14
  Ls age    : 2487
  Len       : 60
  Options   :  ASBR  ABR  E
  seq#      : 8000003c
  chksum    : 0x1714
  Link count: 3
   * Link ID: 10.242.95.12
     Data   : 255.255.255.252
     Link Type: StubNet
     Metric : 1
     Priority : Low
   * Link ID: 10.10.0.1
     Data   : 10.10.0.129
     Link Type: P-2-P
     Metric : 1
   * Link ID: 10.10.0.128
     Data   : 255.255.255.252
     Link Type: StubNet
     Metric : 1
     Priority : Low

json文件(myjson.json文件)你知道吗

[
  {
    "items": [

    ]
  },
  {
    "items": [

    ]
  },
  {
    "items": [

    ]
  },
  {
    "Ls age": "996",
    "seq#": "8000002f",
    "items": [
      {
        "Link ID": "1.16.9.9",
        "Link Type": "P-2-P",
        "Metric": "100",
        "Data": "10.1.155.2"
      }
    ],
    "Len": "48",
    "Ls id": "1.4.0.1",
    "chksum": "0xe7f5",
    "Adv rtr": "1.4.0.1",
    "Type": "Router",
    "Options": "ASBR  E",
    "Link count": "2"
  },
  {
    "Ls age": "392",
    "seq#": "8000001e",
    "items": [
      {
        "Link ID": "1.4.0.1",
        "Link Type": "P-2-P",
        "Metric": "1",
        "Data": "10.242.177.21"
      }
    ],
    "Len": "48",
    "Ls id": "1.16.9.9",
    "chksum": "0x3116",
    "Adv rtr": "1.16.9.9",
    "Type": "Router",
    "Options": "ABR  E",
    "Link count": "2"
  },
  {
    "items": [

    ]
  },
  {
    "Ls age": "1194",
    "seq#": "8001cf7b",
    "items": [
      {
        "Link ID": "1.4.0.2",
        "Link Type": "StubNet",
        "Metric": "0",
        "Data": "255.255.255.255",
        "Priority": "Medium"
      },
      {
        "Link ID": "1.4.0.1",
        "Link Type": "P-2-P",
        "Metric": "10",
        "Data": "10.0.0.2"
      },
      {
        "Link ID": "10.0.0.0",
        "Link Type": "StubNet",
        "Metric": "10",
        "Data": "255.255.255.252",
        "Priority": "Low"
      },
      {
        "Link ID": "10.40.8.0",
        "Link Type": "StubNet",
        "Metric": "100",
        "Data": "255.255.255.252",
        "Priority": "Low"
      },
      {
        "Link ID": "19.23.23.15",
        "Link Type": "P-2-P",
        "Metric": "10",
        "Data": "10.40.10.130"
      }
    ],
    "Len": "96",
    "Ls id": "1.4.0.2",
    "chksum": "0xbfae",
    "Adv rtr": "1.4.0.2",
    "Type": "Router",
    "Options": "ASBR  E",
    "Link count": "6"
  },
  {
    "items": [

    ]
  },
  {
    "Ls age": "171",
    "seq#": "8001a292",
    "items": [
      {
        "Link ID": "100.100.0.10",
        "Link Type": "StubNet",
        "Metric": "12",
        "Data": "255.255.255.255",
        "Priority": "Medium"
      },
      {
        "Link ID": "10.10.0.1",
        "Link Type": "P-2-P",
        "Metric": "10",
        "Data": "10.10.10.18"
      },
      {
        "Link ID": "10.10.10.17",
        "Link Type": "StubNet",
        "Metric": "10",
        "Data": "255.255.255.255",
        "Priority": "Medium"
      },
      {
        "Link ID": "19.23.23.15",
        "Link Type": "P-2-P",
        "Metric": "10",
        "Data": "10.10.30.30"
      }
    ],
    "Len": "84",
    "Ls id": "100.100.0.10",
    "chksum": "0x5fa2",
    "Adv rtr": "100.100.0.10",
    "Type": "Router",
    "Options": "ASBR  E",
    "Link count": "5"
  },
  {
    "Ls age": "191",
    "seq#": "80013bcf",
    "items": [
      {
        "Link ID": "10.10.0.1",
        "Link Type": "StubNet",
        "Metric": "12",
        "Data": "255.255.255.255",
        "Priority": "Medium"
      },
      {
        "Link ID": "15.51.51.14",
        "Link Type": "P-2-P",
        "Metric": "10",
        "Data": "10.10.0.130"
      },
      {
        "Link ID": "10.10.0.129",
        "Link Type": "StubNet",
        "Metric": "10",
        "Data": "255.255.255.255",
        "Priority": "Medium"
      },
      {
        "Link ID": "100.100.0.10",
        "Link Type": "P-2-P",
        "Metric": "10",
        "Data": "10.10.10.17"
      },
      {
        "Link ID": "10.10.10.18",
        "Link Type": "StubNet",
        "Metric": "10",
        "Data": "255.255.255.255",
        "Priority": "Medium"
      }
    ],
    "Len": "96",
    "Ls id": "10.10.0.1",
    "chksum": "0x9871",
    "Adv rtr": "10.10.0.1",
    "Type": "Router",
    "Options": "ASBR  E",
    "Link count": "6"
  },
  {
    "Ls age": "2487",
    "seq#": "8000003c",
    "items": [
      {
        "Link ID": "10.242.95.12",
        "Link Type": "StubNet",
        "Metric": "1",
        "Data": "255.255.255.252",
        "Priority": "Low"
      },
      {
        "Link ID": "10.10.0.1",
        "Link Type": "P-2-P",
        "Metric": "1",
        "Data": "10.10.0.129"
      }
    ],
    "Len": "60",
    "Ls id": "15.51.51.14",
    "chksum": "0x1714",
    "Adv rtr": "15.51.51.14",
    "Type": "Router",
    "Options": "ASBR  ABR  E",
    "Link count": "3"
  },
  {
    "items": [

    ]
  },
  {
    "items": [
      null
    ]
  }
]

脚本

# To remove specific line/string
filename = 'raw1.txt'
with open(filename, 'r') as fin:
    lines = fin.readlines()
with open('clean.txt', 'w') as fout:
    for line in lines:
        if not re.match(r"\s+(Area|OSPF|Link State)", line):
            fout.write(line)

#To return clean file onto json structure
results = []
group = {}
group['items'] = []
subgroup = None

with open('clean.txt') as infile:
    for line in infile:
        if not line.strip():
            results.append(group)
            group = {}
            group['items'] = []
            subgroup = None
        elif not line.startswith('   '):
            key, val = line.split(':')
            key = key.strip()
            val = val.strip()
            group[key] = val
        else:
            if '*' in line:
                if subgroup:
                    group['items'].append(subgroup)
                subgroup = {}
            key, val = line.split(':')
            key = key.replace('*', '').strip()
            val = val.strip()
            subgroup[key] = val

group['items'].append(subgroup)
results.append(group)
print(json.dumps(results, indent=2))

with open('myjson.json', 'w') as json_file:
    json.dump(results, json_file)

我期待干净的文本和json如下

  Type      : Router
  Ls id     : 1.4.0.1
  Adv rtr   : 1.4.0.1
  Ls age    : 996
  Len       : 48
  Options   :  ASBR  E
  seq#      : 8000002f
  chksum    : 0xe7f5
  Link count: 2
   * Link ID: 1.16.9.9
     Data   : 10.1.155.2
     Link Type: P-2-P
     Metric : 100
   * Link ID: 10.1.155.20
     Data   : 255.255.255.252
     Link Type: StubNet
     Metric : 100
     Priority : Low

  Type      : Router
  Ls id     : 1.16.9.9
  Adv rtr   : 1.16.9.9
  Ls age    : 392
  Len       : 48
  Options   :  ABR  E
  seq#      : 8000001e
  chksum    : 0x3116
  Link count: 2
   * Link ID: 1.4.0.1
     Data   : 10.242.177.21
     Link Type: P-2-P
     Metric : 1
   * Link ID: 10.1.155.20
     Data   : 255.255.255.252
     Link Type: StubNet
     Metric : 1
     Priority : Low

  Type      : Router
  Ls id     : 1.4.0.2
  Adv rtr   : 1.4.0.2
  Ls age    : 1194
  Len       : 96
  Options   :  ASBR  E
  seq#      : 8001cf7b
  chksum    : 0xbfae
  Link count: 6
   * Link ID: 1.4.0.2
     Data   : 255.255.255.255
     Link Type: StubNet
     Metric : 0
     Priority : Medium
   * Link ID: 1.4.0.1
     Data   : 10.0.0.2
     Link Type: P-2-P
     Metric : 10
   * Link ID: 10.0.0.0
     Data   : 255.255.255.252
     Link Type: StubNet
     Metric : 10
     Priority : Low
   * Link ID: 10.40.8.0
     Data   : 255.255.255.252
     Link Type: StubNet
     Metric : 100
     Priority : Low
   * Link ID: 19.23.23.15
     Data   : 10.40.10.130
     Link Type: P-2-P
     Metric : 10
   * Link ID: 1.4.10.200
     Data   : 255.255.255.252
     Link Type: StubNet
     Metric : 10
     Priority : Low

  Type      : Router
  Ls id     : 100.100.0.10
  Adv rtr   : 100.100.0.10
  Ls age    : 171
  Len       : 84
  Options   :  ASBR  E
  seq#      : 8001a292
  chksum    : 0x5fa2
  Link count: 5
   * Link ID: 100.100.0.10
     Data   : 255.255.255.255
     Link Type: StubNet
     Metric : 12
     Priority : Medium
   * Link ID: 10.10.0.1
     Data   : 10.10.10.18
     Link Type: P-2-P
     Metric : 10
   * Link ID: 10.10.10.17
     Data   : 255.255.255.255
     Link Type: StubNet
     Metric : 10
     Priority : Medium
   * Link ID: 19.23.23.15
     Data   : 10.10.30.30
     Link Type: P-2-P
     Metric : 10
   * Link ID: 10.90.25.30
     Data   : 255.255.255.255
     Link Type: StubNet
     Metric : 10
     Priority : Medium

  Type      : Router
  Ls id     : 10.10.0.1
  Adv rtr   : 10.10.0.1
  Ls age    : 191
  Len       : 96
  Options   :  ASBR  E
  seq#      : 80013bcf
  chksum    : 0x9871
  Link count: 6
   * Link ID: 10.10.0.1
     Data   : 255.255.255.255
     Link Type: StubNet
     Metric : 12
     Priority : Medium
   * Link ID: 15.51.51.14
     Data   : 10.10.0.130
     Link Type: P-2-P
     Metric : 10
   * Link ID: 10.10.0.129
     Data   : 255.255.255.255
     Link Type: StubNet
     Metric : 10
     Priority : Medium
   * Link ID: 100.100.0.10
     Data   : 10.10.10.17
     Link Type: P-2-P
     Metric : 10
   * Link ID: 10.10.10.18
     Data   : 255.255.255.255
     Link Type: StubNet
     Metric : 10
     Priority : Medium
   * Link ID: 16.16.16.0
     Data   : 255.255.255.252
     Link Type: StubNet
     Metric : 10
     Priority : Low

  Type      : Router
  Ls id     : 15.51.51.14
  Adv rtr   : 15.51.51.14
  Ls age    : 2487
  Len       : 60
  Options   :  ASBR  ABR  E
  seq#      : 8000003c
  chksum    : 0x1714
  Link count: 3
   * Link ID: 10.242.95.12
     Data   : 255.255.255.252
     Link Type: StubNet
     Metric : 1
     Priority : Low
   * Link ID: 10.10.0.1
     Data   : 10.10.0.129
     Link Type: P-2-P
     Metric : 1
   * Link ID: 10.10.0.128
     Data   : 255.255.255.252
     Link Type: StubNet
     Metric : 1
     Priority : Low
[
  {
    "Ls age": "996",
    "seq#": "8000002f",
    "items": [
      {
        "Link ID": "1.16.9.9",
        "Link Type": "P-2-P",
        "Metric": "100",
        "Data": "10.1.155.2"
      }
    ],
    "Len": "48",
    "Ls id": "1.4.0.1",
    "chksum": "0xe7f5",
    "Adv rtr": "1.4.0.1",
    "Type": "Router",
    "Options": "ASBR  E",
    "Link count": "2"
  },
  {
    "Ls age": "392",
    "seq#": "8000001e",
    "items": [
      {
        "Link ID": "1.4.0.1",
        "Link Type": "P-2-P",
        "Metric": "1",
        "Data": "10.242.177.21"
      }
    ],
    "Len": "48",
    "Ls id": "1.16.9.9",
    "chksum": "0x3116",
    "Adv rtr": "1.16.9.9",
    "Type": "Router",
    "Options": "ABR  E",
    "Link count": "2"
  },
  {
    "Ls age": "1194",
    "seq#": "8001cf7b",
    "items": [
      {
        "Link ID": "1.4.0.2",
        "Link Type": "StubNet",
        "Metric": "0",
        "Data": "255.255.255.255",
        "Priority": "Medium"
      },
      {
        "Link ID": "1.4.0.1",
        "Link Type": "P-2-P",
        "Metric": "10",
        "Data": "10.0.0.2"
      },
      {
        "Link ID": "10.0.0.0",
        "Link Type": "StubNet",
        "Metric": "10",
        "Data": "255.255.255.252",
        "Priority": "Low"
      },
      {
        "Link ID": "10.40.8.0",
        "Link Type": "StubNet",
        "Metric": "100",
        "Data": "255.255.255.252",
        "Priority": "Low"
      },
      {
        "Link ID": "19.23.23.15",
        "Link Type": "P-2-P",
        "Metric": "10",
        "Data": "10.40.10.130"
      }
    ],
    "Len": "96",
    "Ls id": "1.4.0.2",
    "chksum": "0xbfae",
    "Adv rtr": "1.4.0.2",
    "Type": "Router",
    "Options": "ASBR  E",
    "Link count": "6"
  },
  {
    "Ls age": "171",
    "seq#": "8001a292",
    "items": [
      {
        "Link ID": "100.100.0.10",
        "Link Type": "StubNet",
        "Metric": "12",
        "Data": "255.255.255.255",
        "Priority": "Medium"
      },
      {
        "Link ID": "10.10.0.1",
        "Link Type": "P-2-P",
        "Metric": "10",
        "Data": "10.10.10.18"
      },
      {
        "Link ID": "10.10.10.17",
        "Link Type": "StubNet",
        "Metric": "10",
        "Data": "255.255.255.255",
        "Priority": "Medium"
      },
      {
        "Link ID": "19.23.23.15",
        "Link Type": "P-2-P",
        "Metric": "10",
        "Data": "10.10.30.30"
      }
    ],
    "Len": "84",
    "Ls id": "100.100.0.10",
    "chksum": "0x5fa2",
    "Adv rtr": "100.100.0.10",
    "Type": "Router",
    "Options": "ASBR  E",
    "Link count": "5"
  },
  {
    "Ls age": "191",
    "seq#": "80013bcf",
    "items": [
      {
        "Link ID": "10.10.0.1",
        "Link Type": "StubNet",
        "Metric": "12",
        "Data": "255.255.255.255",
        "Priority": "Medium"
      },
      {
        "Link ID": "15.51.51.14",
        "Link Type": "P-2-P",
        "Metric": "10",
        "Data": "10.10.0.130"
      },
      {
        "Link ID": "10.10.0.129",
        "Link Type": "StubNet",
        "Metric": "10",
        "Data": "255.255.255.255",
        "Priority": "Medium"
      },
      {
        "Link ID": "100.100.0.10",
        "Link Type": "P-2-P",
        "Metric": "10",
        "Data": "10.10.10.17"
      },
      {
        "Link ID": "10.10.10.18",
        "Link Type": "StubNet",
        "Metric": "10",
        "Data": "255.255.255.255",
        "Priority": "Medium"
      }
    ],
    "Len": "96",
    "Ls id": "10.10.0.1",
    "chksum": "0x9871",
    "Adv rtr": "10.10.0.1",
    "Type": "Router",
    "Options": "ASBR  E",
    "Link count": "6"
  },
  {
    "Ls age": "2487",
    "seq#": "8000003c",
    "items": [
      {
        "Link ID": "10.242.95.12",
        "Link Type": "StubNet",
        "Metric": "1",
        "Data": "255.255.255.252",
        "Priority": "Low"
      },
      {
        "Link ID": "10.10.0.1",
        "Link Type": "P-2-P",
        "Metric": "1",
        "Data": "10.10.0.129"
      }
    ],
    "Len": "60",
    "Ls id": "15.51.51.14",
    "chksum": "0x1714",
    "Adv rtr": "15.51.51.14",
    "Type": "Router",
    "Options": "ASBR  ABR  E",
    "Link count": "3"
  },
]

我真的很感激有人进一步提供帮助和建议。谢谢


Tags: idagedatatypelinkitemsmetricls