You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python读取TXT文件提取浮点数丢失问题求助

解决Python提取.txt文件浮点数缺失的问题

首先,咱们来拆解下你遇到的问题:部分文件里的浮点数没被成功提取,核心问题大概率出在你用的正则表达式局限性上,另外代码里也有几个小细节可以优化。

正则表达式的核心局限

你当前使用的\d*?\.\d+只能匹配小数点后必须有数字、小数点前可无数字的格式,比如能匹配1.234、.5241,但遇到实验室数据里常见的几种格式就会失效:

  • 末尾带小数点的数值,比如6.(可能是记录时的简化写法,实际代表6.0)
  • 整数形式的浮点数,比如5(部分场景下实验室会把整数存为浮点数的简化形式)
  • 带负号的数值,比如-1.234
  • 科学计数法表示的数值,比如1.23e-4或5.24E+2

代码里的小问题

  1. f.close少了括号,应该是f.close(),不过你用了with语句,它会自动帮你关闭文件,这行代码完全多余,删掉即可。
  2. mylist.append(re.findall(...))会把匹配结果作为一个子列表添加到mylist里,最终得到的是二维列表;如果想要一维的浮点数列表,应该用mylist.extend(re.findall(...))或者直接mylist = re.findall(...)。

具体解决方案

1. 替换为更全面的正则表达式

针对实验室常见的浮点数格式,推荐使用这个覆盖范围更广的正则:

-?\d*\.?\d+(?:[eE][+-]?\d+)?

简单解释下各部分的作用:

  • -?:匹配可选的负号
  • \d*:匹配小数点前0个或多个数字
  • \.?:匹配可选的小数点
  • \d+:匹配至少一个数字(避免匹配单独的小数点)
  • (?:[eE][+-]?\d+)?:匹配可选的科学计数法部分(比如e-3、E+5)

2. 修正后的完整代码

import re

mylist = []
file_path = 'folderpath' + 'filenameA.txt'
with open(file_path, 'r') as f:
    # 直接把匹配结果扩展到列表中
    mylist.extend(re.findall(r'-?\d*\.?\d+(?:[eE][+-]?\d+)?', f.read()))

# 如果需要把字符串转为浮点数,可添加这一步
mylist = [float(num) for num in mylist]

3. 排查剩余缺失的数值

如果用了新正则还是有缺失,建议找一个有问题的文件(比如filenameA.txt),对比原文件和提取结果,定位没被匹配到的数值——看看是不是混入了特殊符号、或者有其他非常规格式,这样就能针对性地调整正则了。

内容的提问来源于stack exchange,提问作者GIJOE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:55:06