我有一个输入文件,其中包含这样的数据--
{
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)
您可以使用正则表达式获取每个组和对应的服务器,然后删除不必要的字符并将每个组中的服务器拆分为一个列表:
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",
}