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

如何使用Python删除文本文件中含低于指定值数字的行

需求说明

从目标文件中移除所有包含低于-2000数值的行。当前为Python学习阶段,对re模块用法不熟悉,现有代码存在语法错误、逻辑错误,需要正确的实现方案。

待处理示例文件内容

{ "Position": { "X": -1660.313, "Y": -3107.795, "Z": 12.85458 }
{ "Position": { "X": -494.0083, "Y": 57.33647, "Z": 56.59263 }
{ "Position": { "X": -1039.662, "Y": -2641.444, "Z": 36.96656 }

原有代码问题梳理

  • 语法错误:正则表达式r'('-'\d+)'存在单引号嵌套冲突,Python会判定字符串提前截断,直接运行会报错;同时正则没有匹配小数部分,无法识别示例中带小数点的负数值
  • 逻辑反向:需求是删除包含小于-2000数值的行,原有代码逻辑是把小于-2000的行写入输出文件,和需求完全相反
  • 异常风险:没有判断正则匹配结果是否为空,如果某行没有匹配到数字,直接调用match.group()会抛出属性错误
  • 匹配不全:用re.search只会匹配每行第一个负数,会漏判同一行其他位置小于-2000的数值
  • 命名不规范:用Python内置函数名input作为文件对象变量名,容易引发隐性bug

可行实现方案

方案1:修正正则逻辑实现

import re

# 预编译正则:匹配所有负号开头、支持整数/小数格式的数字
num_pattern = re.compile(r'-\d+\.?\d*')

with open('file.json', 'r', encoding='utf-8') as input_f:
    with open("temp.json", 'w', encoding='utf-8') as output_f:
        for line in input_f:
            # 提取当前行所有匹配到的数字,转成浮点型
            match_nums = [float(item.group()) for item in num_pattern.finditer(line)]
            # 仅当行内没有任何小于-2000的数字时,写入输出文件
            if not any(num < -2000 for num in match_nums):
                output_f.write(line)

方案2:JSON解析实现(更推荐,无错判风险)

你的文件每行都是独立的标准JSON对象,直接用Python内置json模块解析判断,不会出现正则漏判、格式兼容问题,逻辑更可控:

import json

with open('file.json', 'r', encoding='utf-8') as input_f:
    with open("temp.json", 'w', encoding='utf-8') as output_f:
        for line in input_f:
            line = line.strip()
            if not line:
                continue
            # 解析当前行JSON结构
            pos_info = json.loads(line)
            x, y, z = pos_info['Position']['X'], pos_info['Position']['Y'], pos_info['Position']['Z']
            # 三个坐标值均不小于-2000时保留该行
            if min(x, y, z) >= -2000:
                output_f.write(line + '\n')

运行效果

用提供的示例文件测试,过滤后输出文件仅保留第二行内容:第一行Y值-3107.795、第三行Y值-2641.444均小于-2000,会被正确移除,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:48:19