如何在指定目录创建JSON文件并修复Python运行时FileNotFoundError错误
错误原因分析
- 文件打开模式使用错误:代码中使用了
r只读模式打开文件,该模式要求目标文件必须已存在,你需要创建并写入新文件,应该使用w写入模式 - 路径不规范:你传入的路径是相对路径,缺少根路径标识
/,只有从系统根目录运行代码才能识别该路径;同时没有判断父目录是否存在,如果父目录不存在也会触发该报错 - 写入逻辑冗余:
json.dump已经完成了Python对象到JSON格式的序列化和写入操作,额外的fp.write(data)会导致文件内容异常,如果传入非字符串类型的data还会直接报错 - 路径拼接方式不兼容:手动使用
/拼接路径,在Windows系统下会出现路径分隔符不匹配的问题
修复后的代码
import json import os def writeToJSONFile(path, fileName, data): # 自动创建不存在的父目录 os.makedirs(path, exist_ok=True) # 系统兼容的路径拼接 filePathNameWExt = os.path.join(path, f"{fileName}.json") # 使用写入模式打开文件,指定编码避免乱码 with open(filePathNameWExt, 'w', encoding='utf-8') as fp: json.dump(data, fp, ensure_ascii=False, indent=2) # 路径开头补充/改为标准绝对路径 writeToJSONFile("/Users/bea/Desktop/iSight/Webservertesting/json", "data1", "book")
改动说明
- 引入
os模块,使用os.makedirs自动创建目标路径下所有不存在的父目录,exist_ok=True参数避免目录已存在时报错 - 替换手动路径拼接为
os.path.join,自动适配不同操作系统的路径分隔符 - 将文件打开模式从
r改为w,支持创建新文件写入内容,新增encoding='utf-8'参数避免特殊字符乱码 - 删除冗余的
fp.write语句,仅保留json.dump完成序列化写入,新增ensure_ascii=False避免中文转义,indent=2优化JSON文件可读性 - 调用函数时传入的路径开头补充了
/,改为标准绝对路径,避免相对路径依赖运行目录的问题
内容的提问来源于stack exchange,提问作者La Brewers
相关产品推荐
相关产品推荐

