使用Python Click库读取JSON文件遇到报错该如何解决?
问题排查与修正方案
现有代码的问题
- 路径调用错误:
dazpropsf = open('path')给变量path加了引号,相当于固定读取名为path的文件,而非你之前通过prompt获取的用户输入路径 - 缺少文件读取、写入逻辑:当前代码仅执行了打开文件的动作,没有读取JSON内容,也没有写入新文件的相关实现
- 没有处理文件资源释放:直接用
open()打开文件后没有主动关闭,可能会造成资源泄漏
修正后的完整代码
import json import os import click def dazprops(): """读取Daz3D属性文件并原样写入新文件""" # 获取用户输入的原文件路径 src_path = click.prompt('请指定Daz3D属性文件的位置') src_path = os.path.realpath(src_path) # 输入新文件的保存路径 dest_path = click.prompt('请指定新文件的保存路径') dest_path = os.path.realpath(dest_path) # 用with上下文管理器自动处理文件开闭,直接读写文本保证原文件内容无改动 with open(src_path, 'r', encoding='utf-8') as src_f: content = src_f.read() with open(dest_path, 'w', encoding='utf-8') as dest_f: dest_f.write(content) click.echo(f"文件已成功复制到 {dest_path}") if __name__ == '__main__': dazprops()
补充说明
如果后续需要对JSON内容做修改,可将读写部分替换为JSON解析逻辑,保证格式合规:
# 读取并解析JSON内容 with open(src_path, 'r', encoding='utf-8') as src_f: data = json.load(src_f) # 写入JSON,indent参数保留格式化缩进,ensure_ascii保证中文不转码 with open(dest_path, 'w', encoding='utf-8') as dest_f: json.dump(data, dest_f, indent=4, ensure_ascii=False)
内容的提问来源于stack exchange,提问作者DanS
相关产品推荐
相关产品推荐

