Python如何无需通配符即可删除仅包含数值的整行内容
问题原因分析
你的原有代码的判断逻辑存在根本缺陷:all(i.isdigit() for i in line)要求行内所有字符都是纯数字才会返回True,但你需要删除的纯数值行里包含大量空格、小数点、千分位逗号,这些字符的isdigit()方法都返回False,导致这个判断条件永远返回False,筛选逻辑完全失效,才会出现非预期的输出。
正确实现代码
我们可以通过正则匹配来识别仅由数字、空格、小数点、千分位逗号组成的纯数值行,直接过滤这类行即可:
import re # 正则规则:匹配整行仅包含数字、空白字符、小数点、千分位逗号的内容 pure_num_pattern = re.compile(r'^[\d\s,.]+$') with open("data.txt", 'r', encoding='utf-8') as f: for line in f: stripped_line = line.strip() # 保留空行 if not stripped_line: print(line, end='') continue # 非纯数值行保留输出 if not pure_num_pattern.match(stripped_line): print(line, end='')
逻辑说明
- 正则
^[\d\s,.]+$会从行首到行尾完整匹配,仅当所有字符都属于数字、空白、小数点、逗号这四类时才会匹配成功 - 空行会单独判断保留,符合你给出的期望输出格式
- 没有任何硬编码的数值范围判断,完全动态识别纯数值行
内容的提问来源于stack exchange,提问作者Ailurophile
相关产品推荐
相关产品推荐

