如何用Python提取文本文件中Measurement区间内的可变数量数值?
Python提取文本中指定测量区间的数值
这里提供两种简洁的实现方式,适配可变数量的数值行:
方法一:逐行遍历+状态标记(推荐大文件/高容错场景)
通过标记当前是否处于目标测量区间,逐行读取并收集数值,内存占用低且容错性强:
measurements = {} current_measure = None with open("your_file.txt", "r") as f: for line in f: line = line.strip() if not line: continue # 跳过空行 # 进入新的测量区间 if line.startswith("Starting_Measurement"): current_measure = line measurements[current_measure] = [] # 退出当前测量区间 elif line.startswith("End_Measurement"): current_measure = None # 处于测量区间时,尝试转换并收集数值 elif current_measure is not None: try: num = float(line) num = int(num) if num.is_integer() else num measurements[current_measure].append(num) except ValueError: continue # 跳过非数值行 # 查看结果 for name, values in measurements.items(): print(f"{name}: {values}")
优势:
- 逐行处理,适合超大文件,不会一次性加载全部内容到内存
- 自动适配任意数量的
Starting_MeasurementX区间(不止两个也能处理) - 跳过空行和非数值行,容错性好
方法二:正则表达式匹配(推荐小文件/简洁代码场景)
一次性读取文件内容,用正则匹配所有目标区间,代码更紧凑:
import re with open("your_file.txt", "r") as f: content = f.read() # 匹配编号对应的测量区间,确保Starting和End的编号一致 pattern = r"Starting_Measurement(\d+)\s+([\d\s]+?)\s+End_Measurement\1" matches = re.findall(pattern, content, re.DOTALL) measurements = {} for idx, values_str in matches: values = [] for num_str in values_str.strip().split(): try: num = float(num_str) num = int(num) if num.is_integer() else num values.append(num) except ValueError: continue measurements[f"Starting_Measurement{idx}"] = values # 查看结果 for name, values in measurements.items(): print(f"{name}: {values}")
优势:
- 代码行数少,逻辑集中
- 一次性提取所有区间,适合文件体积较小的场景
内容的提问来源于stack exchange,提问作者Romain
相关产品推荐
相关产品推荐

