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

求助:编写脚本统计JSON文件中多组文本出现次数及解决CMD闪退问题

解决脚本闪退与多文本统计需求的方案

嘿,我来帮你搞定这两个问题——CMD窗口闪退和多文本统计的需求!

先解决窗口闪退的问题

你的脚本闪退大概率是因为运行时抛出了未被捕获的异常,比如:

  • 找不到_metadata.json文件(路径不对或者文件不存在)
  • 某个JSON对象里没有status这个键
    这种情况下程序会直接崩溃,根本走不到最后的input('Press ENTER to exit'),所以窗口一闪而过。

解决办法有两个:

  1. 从命令提示符手动运行脚本:打开CMD,导航到脚本所在文件夹,输入python 你的脚本名.py,这样即使崩溃,错误信息也会留在窗口里,方便排查问题。
  2. 给关键代码加异常捕获:把读取JSON和统计的代码用try-except包裹,捕获错误并提示,确保程序能走到等待输入的步骤。

优化单文本统计的代码

你原来的while循环有点繁琐,Python里可以用更简洁、更安全的方式实现统计:

count = sum(1 for item in data if item.get('status') == 'Diamond')

用item.get('status')而不是直接item['status'],可以避免因为某个对象没有status键而抛出KeyError,容错性更强。

扩展到多文本统计的需求

要统计多组文本(比如Diamond、Gold、Iron),我们可以用字典来管理目标和计数,最后格式化输出成你想要的样式。下面是完整的优化脚本:

import json

# 定义要统计的目标状态列表
target_statuses = ['Diamond', 'Gold', 'Iron']
# 初始化计数字典,每个目标初始计数为0
status_counts = {status: 0 for status in target_statuses}

try:
    # 用with语句打开文件,自动关闭更安全
    with open('_metadata.json', 'r', encoding='utf-8') as f:
        data = json.load(f)
    
    # 遍历所有数据项,统计各状态出现次数
    for item in data:
        status = item.get('status')
        if status in status_counts:
            status_counts[status] += 1
    
    # 格式化输出成你想要的列表样式,比如 "Diamond 7 Gold 5 Iron 45"
    result = ' '.join([f"{status} {count}" for status, count in status_counts.items()])
    print(result)

except FileNotFoundError:
    print("错误:找不到_metadata.json文件,请检查路径是否正确!")
except json.JSONDecodeError:
    print("错误:_metadata.json文件格式不正确,不是有效的JSON!")
except Exception as e:
    print(f"发生未知错误:{str(e)}")

input('Press ENTER to exit')

这段脚本的优势:

  • 用with语句管理文件,自动关闭,避免资源泄漏
  • 捕获了常见异常类型,遇到错误会给出明确提示,不会直接崩溃
  • 支持同时统计多个状态,扩展起来很方便(只要在target_statuses里加新状态就行)
  • 输出格式完全符合你想要的列表样式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 13:13:15