如何修改Python代码以打印已生成的JSON文件内容
问题原因及修正方案
你的代码无法打印JSON内容,甚至大概率会提前抛出运行异常,核心问题有以下几点:
- 未正确使用CSV解析能力:你直接调用
csvfile.read()将整个CSV内容读取为普通字符串,没有使用csv.DictReader()解析为可按列名取值的字典结构,遍历字符串得到的是单个字符,根本无法通过m['No']取到对应字段,代码运行到此处就会中断。 - 返回值错误:你在函数最后返回的是已经调用过
close()方法的文件对象jsonfile,不是JSON内容本身,打印已关闭的文件对象只会输出类似<_io.TextIOWrapper name='orders.json' mode='w' encoding='utf-8'>的无效信息,不会输出文件内存储的JSON内容。 - 资源管理不严谨:硬编码调用
close()关闭文件的方式如果中间运行出错,会导致文件资源没有正常释放。
修正后的可运行代码如下:
import csv import json def jsonformat(infile,outfile): contents = {} # 用with上下文管理器自动处理文件关闭,避免资源泄漏 with open(infile, 'r', encoding='utf-8') as csvfile: # 用csv.DictReader解析CSV,每一行转为以表头为键的字典 reader = csv.DictReader(csvfile) for m in reader: key = m['No'] contents[key] = m # 生成带缩进、支持中文的JSON字符串 json_content = json.dumps(contents, indent=4, ensure_ascii=False) # 写入输出文件 with open(outfile, 'w', encoding='utf-8') as jsonfile: jsonfile.write(json_content) # 返回JSON内容而非文件对象 return json_content infile = 'orders.csv' outfile = 'orders.json' output = jsonformat(infile,outfile) print(output)
内容的提问来源于stack exchange,提问作者Geraldo
相关产品推荐
相关产品推荐

