如何在python中将非json数据修改为特定格式?

问题描述 投票:0回答:1

我有一个输入文件,其中包含这样的数据--

{
0/2 = [
"test_server_101:99904"
,"test_server_103:99907"
,"test_server_106:99906"
];
1/2 = [
"test_server_203:99906"
,"test_server_303:99902"
,"test_server_403:99906"
];
}

我正在尝试将其转换为--

{"test_server_101:99904": '0' ,"test_server_103:99907": '0' ,"test_server_106:99906": '0' "test_server_203:99906": '1' ,"test_server_303:99902": '1' ,"test_server_403:99906": '1' }

因为我无法控制输入,并且这不是正确的 json 数据或不正确的字典,因为键没有单引号或双引号。处理输入数据很困难。到目前为止,我已经尝试了下面的代码,但它没有按照我的要求工作。这方面有什么建议吗?

server_data = {}
with open('file.txt', 'r') as f:
  lines = f.readlines()
  print(lines) 

  for line in lines:
    parts = line.strip().split(" = ")
    print(parts)
    value_str = value_str.strip()[1:]
    for server in server_list:
      server_name, *port = server.strip().split(":")
      server_data[server_name] = key
print(server_data)
python python-3.x
1个回答
0
投票

您可以使用正则表达式获取每个组和对应的服务器,然后删除不必要的字符并将每个组中的服务器拆分为一个列表:

import re

with open("file.txt", "r") as file:
    input_data = file.read()

matches = re.findall(r"(\d+)/\d+ = \[(.*?)\];", input_data, re.DOTALL)

output_dict = {}

for group, servers in matches:
    servers_list = servers.replace("\n", "").replace('"', "").split(",")
    servers_list = [s.strip() for s in servers_list]

    for server in servers_list:
        output_dict[server] = group

print(output_dict)
{
    "test_server_101:99904": "0",
    "test_server_103:99907": "0",
    "test_server_106:99906": "0",
    "test_server_203:99906": "1",
    "test_server_303:99902": "1",
    "test_server_403:99906": "1",
}
© www.soinside.com 2019 - 2024. All rights reserved.