如何用Python编写函数将input.txt中的landmark数据转为列表的列表?
问题描述
我有一个名为input.txt的文本文件,内容如下:
landmark { x: 0.48397088050842285 y: 0.25201746821403503 z: -0.285147100687027 visibility: 0.9999984502792358 } landmark { x: 0.4912211298942566 y: 0.23858927190303802 z: -0.27364951372146606 visibility: 0.9999926090240479 } landmark { x: 0.4947235584259033 y: 0.23917287588119507 z: -0.27369818091392517 visibility: 0.9999934434890747 }
需要编写Python函数,将每个landmark中的数值存入列表的列表,最终效果类似:list[0] = [0.48397,0.252017,-0.28514,0.999999],list[1] = [0.491221,0.2385892,-0.27364,0.999992],以此类推。
解决方案
方法一:逐行解析文本
针对固定结构的文本,逐行读取并筛选关键内容,提取数值后按组整理:
def parse_landmarks(file_path): landmarks = [] current = [] with open(file_path, 'r') as f: for line in f: stripped_line = line.strip() # 跳过无关行 if not stripped_line or stripped_line in ('landmark {', '}'): continue # 提取冒号后的数值,转成float并保留6位小数 val = round(float(stripped_line.split(':')[1].strip()), 6) current.append(val) # 每个landmark包含4个数值,收集完成就加入总列表 if len(current) == 4: landmarks.append(current) current = [] return landmarks # 调用示例 result = parse_landmarks('input.txt') for idx, lm in enumerate(result): print(f'list[{idx}] = {lm}')
方法二:正则表达式批量提取
用正则匹配所有浮点数,再按每4个一组分组,适合格式统一的场景:
import re def parse_landmarks_regex(file_path): with open(file_path, 'r') as f: content = f.read() # 匹配所有正负浮点数 num_strings = re.findall(r'-?\d+\.\d+', content) # 转换为float并分组 landmarks = [ [round(float(num), 6) for num in num_strings[i:i+4]] for i in range(0, len(num_strings), 4) ] return landmarks # 调用示例 result = parse_landmarks_regex('input.txt') for idx, lm in enumerate(result): print(f'list[{idx}] = {lm}')
两种方法的特点
- 方法一逻辑清晰,能精确控制每一步处理,适合文本结构严格固定的情况。
- 方法二更灵活,只要数值格式统一,即使文本有换行、空格变化也能正常提取。
内容的提问来源于stack exchange,提问作者nsyh
相关产品推荐
相关产品推荐

