求助:编写脚本统计JSON文件中多组文本出现次数及解决CMD闪退问题
解决脚本闪退与多文本统计需求的方案
嘿,我来帮你搞定这两个问题——CMD窗口闪退和多文本统计的需求!
先解决窗口闪退的问题
你的脚本闪退大概率是因为运行时抛出了未被捕获的异常,比如:
- 找不到
_metadata.json文件(路径不对或者文件不存在) - 某个JSON对象里没有
status这个键
这种情况下程序会直接崩溃,根本走不到最后的input('Press ENTER to exit'),所以窗口一闪而过。
解决办法有两个:
- 从命令提示符手动运行脚本:打开CMD,导航到脚本所在文件夹,输入
python 你的脚本名.py,这样即使崩溃,错误信息也会留在窗口里,方便排查问题。 - 给关键代码加异常捕获:把读取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
相关产品推荐
相关产品推荐

