У меня есть входной файл, содержащий такие данные:
{
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)
О какой программе вы говорите, я не совсем уловил ваш вопрос. Вы предлагаете jsonlint?
@VIPINKUMAR Я думаю, вопрос в том, предположительно, какая-то другая программа использует этот формат (почему еще он создается таким образом?), так как именно это происходит?
Я понятия не имею, откуда берутся эти данные и как этот файл можно использовать в вашей системе. Но, похоже, он намеренно отформатирован - и я предполагаю, что он предназначен для анализа другими программами.
Я понятия не имею о нисходящем и восходящем потоке этих данных.






Вы можете использовать регулярное выражение для получения каждой группы и соответствующих серверов, затем удалить ненужные символы и разделить серверы в каждой группе на список:
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(",")
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",
}
Я предполагаю, что есть и другие программы, которые могут читать этот файл... Вы знаете, как они это делают?