Python读取TXT文件提取浮点数丢失问题求助
解决Python提取.txt文件浮点数缺失的问题
首先,咱们来拆解下你遇到的问题:部分文件里的浮点数没被成功提取,核心问题大概率出在你用的正则表达式局限性上,另外代码里也有几个小细节可以优化。
正则表达式的核心局限
你当前使用的\d*?\.\d+只能匹配小数点后必须有数字、小数点前可无数字的格式,比如能匹配1.234、.5241,但遇到实验室数据里常见的几种格式就会失效:
- 末尾带小数点的数值,比如
6.(可能是记录时的简化写法,实际代表6.0) - 整数形式的浮点数,比如
5(部分场景下实验室会把整数存为浮点数的简化形式) - 带负号的数值,比如
-1.234 - 科学计数法表示的数值,比如
1.23e-4或5.24E+2
代码里的小问题
f.close少了括号,应该是f.close(),不过你用了with语句,它会自动帮你关闭文件,这行代码完全多余,删掉即可。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
相关产品推荐
相关产品推荐

