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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 15:24:02