如何将无线电传输的格式化字符串转换为Python字典?
无线电传输字符串转Python字典实现方案
输入格式示例
原始传输字符串:
message_string = 'Transmission\n variables \n 0.01 First variable\n 0.02 Second variable\n 0.03 Third variable \n More variables\n 0.03 Next variable\n 0.04 Another variable'
打印后显示内容:
Transmission variables 0.01 First variable 0.02 Second variable 0.03 Third variable More variables 0.03 Next variable 0.04 Another variable
目标字典结构
需转换为层级式字典,外层键为分组名称,对应值为子字典(变量名映射到对应数值):
message_dict = { 'variables': { 'First variable': 0.01, 'Second variable': 0.02, 'Third variable': 0.03}, 'More variables': { 'Next variable': 0.03, 'Another variable': 0.04, } }
实现代码
以下是系统化处理且容错性强的Python实现:
def parse_transmission(message_str): message_dict = {} current_group = None # 分割行并清理无效内容 lines = [line.strip() for line in message_str.split('\n') if line.strip()] for line in lines: # 跳过开头的Transmission标识行 if line == 'Transmission': continue # 判断是否为分组行(非数值开头) if not line[0].isdigit() and line[0] != '.': current_group = line message_dict[current_group] = {} continue # 解析变量行:分割数值与变量名 parts = line.split(maxsplit=1) if len(parts) != 2: continue try: value = float(parts[0]) var_name = parts[1].strip() if current_group is not None: message_dict[current_group][var_name] = value except ValueError: # 数值转换失败时跳过该行 continue return message_dict # 测试示例 message_string = 'Transmission\n variables \n 0.01 First variable\n 0.02 Second variable\n 0.03 Third variable \n More variables\n 0.03 Next variable\n 0.04 Another variable' result = parse_transmission(message_string) import pprint pprint.pprint(result)
关键特性说明
- 行清理:自动过滤空行和首尾空格,避免无效内容干扰解析。
- 分组自动初始化:识别到分组行时自动创建对应子字典,不会因分组缺失引发
KeyError。 - 容错处理:遇到格式错误的变量行、数值转换失败的行时直接跳过,程序不会抛出异常。
- 兼容变量名含空格:用
split(maxsplit=1)仅分割一次,确保变量名中的空格被完整保留。
内容的提问来源于stack exchange,提问作者AmericanJael
相关产品推荐
相关产品推荐

