如何按特定条件将CSV转换为JSON,区分图片与网页Link字段?
解决CSV转JSON时按文件类型动态处理Link字段的问题
需求回顾
把CSV数据每行转换成以「姓名_编号.json」命名的独立JSON文件,其中link字段需要根据文件扩展名自动处理:
- 若为图片格式(如jpg、png、jpeg等),格式化为
{"link": {"photo": [{"abc": "文件名"}]}} - 若为html格式,格式化为
{"link": {"webpage": [{"abc": "文件名"}]}}
原代码存在缩进错误、多余字段处理,且手动维护图片扩展名列表效率低,以下是优化后的解决方案:
优化后的代码
import json import csv import mimetypes # 用with语句自动管理文件资源,避免手动关闭 with open("student_data.csv", 'r', encoding='utf-8') as csv_file: # 指定CSV表头,确保读取字段准确 csv_reader = csv.DictReader(csv_file, fieldnames=["no", "name", "link"]) # 跳过CSV的表头行 next(csv_reader) for row in csv_reader: # 清洗字段值,去除前后空格避免判断出错 link_value = row['link'].strip() name = row['name'].strip() no = row['no'].strip() # 自动识别文件类型,无需手动枚举所有图片扩展名 mime_type, _ = mimetypes.guess_type(link_value) if mime_type and mime_type.startswith('image/'): row['link'] = {"photo": [{"abc": link_value}]} elif link_value.lower().endswith('.html'): row['link'] = {"webpage": [{"abc": link_value}]} # 生成JSON并写入目标文件 json_content = json.dumps(row, indent=2, ensure_ascii=False) with open(f"{name}_{no}.json", 'w', encoding='utf-8') as json_output: json_output.write(json_content)
代码说明
- 自动识别图片类型:借助
mimetypes模块通过扩展名推断MIME类型,只要是image/开头的类型都判定为图片,无需手动维护冗长的图片扩展名列表 - 安全管理文件资源:用
with语句处理文件操作,自动完成资源释放,避免手动调用close()导致的资源泄漏 - 数据清洗:对CSV字段值执行
strip(),去除前后空格,防止因CSV行尾空格导致的格式判断错误 - 修复原代码问题:移除了原代码中不存在的
roll_number字段处理,修正了缩进错误,指定表头确保字段读取准确
示例验证
给定CSV数据:
no,name,link 1,pal,image.png 2,nina,page.html 3,ashi,image.jpg
运行代码后,pal_1.json的输出符合预期:
{ "no": "1", "name": "pal", "link": { "photo": [ { "abc": "image.png" } ] } }
内容的提问来源于stack exchange,提问作者sanjana joshi
相关产品推荐
相关产品推荐

