如何在Python中将非JSON格式数据转换为指定格式?
非标准配置文件转指定字典格式
输入与期望输出
输入文件格式
{ 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或Python字典,键无引号,结构使用自定义分隔符,直接用JSON解析或简单字符串分割易出错。原尝试代码存在未定义变量(如value_str、server_list),逻辑不完整,无法正确提取数据。
解决方案代码
server_data = {} with open('file.txt', 'r') as f: # 读取内容并清理无关符号 content = f.read().replace('{', '').replace('}', '').replace(';', '').strip() # 按空行拆分每个键值对块 pairs = content.split('\n\n') for pair in pairs: if not pair: continue # 拆分键和值部分 key_part, value_part = pair.split(' = ', 1) # 提取目标标记值(如从0/2中取0) target_key = key_part.split('/')[0] # 提取所有服务器地址:清理括号、引号、逗号后拆分 servers = [s.strip().strip('",') for s in value_part.replace('[', '').replace(']', '').split('\n') if s.strip()] # 填充目标字典 for server in servers: server_data[server] = target_key # 拼接成要求的字符串格式 result = '{' + ', '.join([f'"{k}": \'{v}\'' for k, v in server_data.items()]) + '}' print(result)
代码说明
- 内容清理:先移除输入中的大括号、分号,简化后续处理流程;
- 键值对拆分:通过空行分割每个
X/Y = [...]结构块; - 标记值提取:从
X/Y格式的键中拆分出X,作为对应服务器的标记值; - 服务器地址提取:移除值部分的方括号,按行拆分后清理引号、逗号,得到纯净的服务器地址;
- 结果拼接:遍历字典,按指定格式拼接成最终字符串。
内容的提问来源于stack exchange,提问作者VIPIN KUMAR
相关产品推荐
相关产品推荐

