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

如何使用Python在多份JSON文件中查找指定value对应的文件与行号

需求说明
  • 现有5个JSON文件,命名分别为JSON1.json、JSON2.json、JSON3.json、JSON4.json、JSON5.json,通用格式如下:
{
  "flower": {
    "price": {
      "type": "good",
      "value": 5282.0,
      "direction": "up"
     }
    },
  "furniture": {
    "price": {
      "type": "comfy",
      "value": 9074.0,
      "direction": "down"
     }
   }
}
  • 需求:接收用户输入的数值,查找所有JSON文件中value字段等于该数值的位置,输出对应JSON文件名和行号,预期输出效果示例:
Enter the value: 9074
该值存在于JSON日志文件JSON1的第12行
原有代码问题

你编写的代码存在以下问题:

  1. 重复编写5次文件读取逻辑,代码冗余扩展性差,后续新增JSON文件需要手动添加代码
  2. 语法不符合Python规范:int i = 0;、i++、item(i+1)都是其他编程语言的写法,Python不支持该类语法
  3. 直接使用json.load将JSON转为Python字典,丢失了原始文件的行号信息,无法实现行号输出需求
  4. 没有处理输入类型:用户输入的内容是字符串类型,JSON中的value是浮点型,直接比较永远无法匹配
正确实现代码
import re

# 预定义要遍历的JSON文件列表,后续新增文件只需修改这个列表即可
json_files = [f"JSON{i}.json" for i in range(1, 6)]
# 匹配value字段的正则,提取后面的数值,自动兼容数值前后的空格
value_pattern = re.compile(r'"value"\s*:\s*(\d+\.?\d*)')

# 获取用户输入,转成浮点型兼容整数、小数输入
user_input = input("Enter the value: ")
try:
    target_value = float(user_input)
except ValueError:
    print("输入的不是有效数值,请重新运行程序")
    exit()

# 遍历所有JSON文件
for file_name in json_files:
    try:
        # 逐行读取文件,同时记录行号(行号从1开始计数)
        with open(file_name, 'r', encoding='utf-8') as f:
            for line_num, line_content in enumerate(f, start=1):
                # 匹配当前行的value值
                match_res = value_pattern.search(line_content)
                if match_res:
                    current_value = float(match_res.group(1))
                    if current_value == target_value:
                        print(f"该值存在于JSON日志文件{file_name.split('.')[0]}的第{line_num}行")
    except FileNotFoundError:
        # 忽略不存在的文件,避免程序崩溃
        continue
实现说明
  • 用列表推导式批量生成待遍历的JSON文件名,不需要重复编写文件读取逻辑
  • 逐行读取文件的同时用enumerate记录行号,解决了json.load丢失行号的问题
  • 用正则匹配提取每行value对应的数值,自动兼容数值前后的空格、带不带小数点的格式
  • 提前对用户输入做类型转换,避免字符串和数值比较不匹配的问题
  • 加了异常捕获,输入非法数值、文件不存在都不会导致程序崩溃

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:39:01