Python实现CSV转JSON:将team_members字段拆分为数组元素
解决CSV转JSON时将逗号分隔的team_members转为数组的问题
嘿,这问题我熟!你已经搞定CSV转JSON的基础流程了,就差把team_members里的逗号分隔字符串拆成独立数组元素对吧?下面给你两个靠谱的Python实现方案,按需选就行:
先把你的示例CSV内容贴出来方便对照:
demo.csv 内容:
id,team_name,team_members 123,Biology,"Ali Smith, Jon Doe" 234,Math,Jane Smith 345,Statistics ,"Matt P, Albert Shaw" 456,Chemistry,"Andrew M, Matt Shaw, Ali Smith" 678,Physics,"Joe Doe, Jane Smith, Ali S"
方案一:用Python内置csv+json模块(无额外依赖)
这个方案适合轻量场景,不需要安装第三方库,纯靠Python自带模块就能搞定:
import csv import json def csv_to_json_with_array(csv_file_path, json_file_path): converted_data = [] # 读取CSV文件 with open(csv_file_path, mode='r', encoding='utf-8') as csv_file: # 用DictReader直接把每行转为字典,键就是CSV的字段名 csv_reader = csv.DictReader(csv_file) for row in csv_reader: # 处理team_members字段:先清理首尾空格,再拆分 raw_members = row['team_members'].strip() if raw_members: # 按", "拆分,同时清理每个成员名字的首尾空格 row['team_members'] = [member.strip() for member in raw_members.split(', ')] else: # 如果字段为空,转为空数组保证格式一致 row['team_members'] = [] converted_data.append(row) # 写入JSON文件,indent=4让格式更美观 with open(json_file_path, mode='w', encoding='utf-8') as json_file: json.dump(converted_data, json_file, indent=4) # 替换成你的文件路径 csv_to_json_with_array('demo.csv', 'output.json')
关键细节说明:
csv.DictReader自动映射字段名和值,省去手动处理表头的麻烦- 两次
strip()是为了处理示例里Statistics那行的多余空格,避免拆分出无效的空字符串 - 空的
team_members字段会转为空数组,保证JSON结构的一致性
方案二:用Pandas处理(适合大数据量/已有Pandas工作流)
如果你平时已经在用Pandas处理数据,或者CSV文件很大,这个方案更高效:
import pandas as pd import json # 读取CSV,skipinitialspace=True自动忽略字段值前面的空格 df = pd.read_csv('demo.csv', skipinitialspace=True) # 批量处理team_members字段:拆分字符串为列表,空值转为空数组 df['team_members'] = df['team_members'].apply( lambda x: [member.strip() for member in x.split(', ')] if pd.notna(x) and x.strip() else [] ) # 转成数组格式的JSON并写入文件 df.to_json('output_pandas.json', orient='records', indent=4, force_ascii=False)
关键细节说明:
skipinitialspace=True帮你自动处理CSV里字段值前的空格,不用手动写stripapply+lambda函数快速完成批量字段转换orient='records'让输出的JSON是数组格式,和方案一的结果完全一致
最终效果示例
处理后output.json里的条目会是这样的:
[ { "id": 123, "team_name": "Biology", "team_members": [ "Ali Smith", "Jon Doe" ] }, { "id": 234, "team_name": "Math", "team_members": [ "Jane Smith" ] } // 其余条目格式类似 ]
内容的提问来源于stack exchange,提问作者sharp
相关产品推荐
相关产品推荐

