Python JSON转CSV提取指定键触发KeyError,如何自动填充缺失键
问题修复:JSON转CSV缺失键抛出KeyError
错误根因
直接使用dic[键名]读取字典值时,若JSON条目不存在对应键,会直接抛出KeyError异常,不符合你缺失键填充默认值的需求。
修复方案
使用Python字典内置的get()方法取值,该方法支持传入第二个参数作为键不存在时返回的默认值,这里我们默认填充空字符串,你可以根据需求调整为None、'-'等其他默认值。
修改后完整代码如下:
import csv import json import sys import codecs def trans(path): jsonData = codecs.open('C:/Users/jeri/Desktop/1.json', 'r', 'utf-8') csvfile = open('C:/Users/jeri/Desktop/1.csv', 'w', newline='', encoding='utf-8') writer = csv.writer(csvfile, delimiter=',') keys = ['dob','firstname','lastname'] writer.writerow(keys) for line in jsonData: dic = json.loads(line) # 改用get方法取值,缺失键返回空字符串 writer.writerow([dic.get('dob', ''), dic.get('firstname', ''), dic.get('lastname', '')]) jsonData.close() csvfile.close() if __name__ == '__main__': path = str(sys.argv[0]) print(path) trans(path)
可选优化建议
- 建议使用
with上下文管理器管理文件打开逻辑,无需手动调用close(),就算程序运行过程中抛出异常也能正确关闭文件,示例写法:
with codecs.open('C:/Users/jeri/Desktop/1.json', 'r', 'utf-8') as jsonData, \ open('C:/Users/jeri/Desktop/1.csv', 'w', newline='', encoding='utf-8') as csvfile: # 所有文件读写逻辑都放在这个代码块内
- 目前代码中传入的
path参数未实际使用,若需要动态指定输入文件,可替换硬编码的文件路径为传入的path参数。
内容的提问来源于stack exchange,提问作者jeri teri
相关产品推荐
相关产品推荐

