python:从csv拆分并创建json数据
如何创建从csv到json的嵌套字段?我查看了另一个stackoverflow,但它们并不是我想要格式化的。我有一个包含1列的数据集,必须将其转换为嵌套字段 数据: 代码:python:从csv拆分并创建json数据,python,json,Python,Json,如何创建从csv到json的嵌套字段?我查看了另一个stackoverflow,但它们并不是我想要格式化的。我有一个包含1列的数据集,必须将其转换为嵌套字段 数据: 代码: with open('test.csv', 'r') as file: headers = next(file) #skip the headers fieldnames = headers.rstrip().split(",") csv_reader
with open('test.csv', 'r') as file:
headers = next(file) #skip the headers
fieldnames = headers.rstrip().split(",")
csv_reader = csv.DictReader(file, fieldnames) #creating a dictionary
import datetime
for row_dict in csv_reader:
row_dict['name'] = row_dict['name'].split(",")
json_data = json.dumps(row_dict)
print(json_data)
我正在列表中获取输出,但它不是嵌套的
{"id": "1", "name": ["Smith", " Mr. Adams"]}
{"id": "2", "name": ["McAdams", " Mrs. Audrey"]}
{"id": "3", "name": ["McAdams", " Doctor John"]}
{"id": "4", "name": ["Missing Value"]}
最终输出:有没有办法做到这一点
{"id": "1", "name": [{"last_name": "Smith",
"prefix": "Mr.",
"first_name": "Adams"}]}
{"id": "1", "name": [{"last_name": "McAdams",
"prefix": "Mrs.",
"first_name": "Audrey"}]}
{"id": "1", "name": [{"last_name": "McAdams",
"prefix": "Dr.",
"first_name": "John"}]}
{"id": "1", "name": [{"last_name": "Missing Value",
"prefix": "Missing Value",
"first_name": "Missing Value"}]}
只需使用。拆分一些时间并创建一个新的dict
import json
csv = '''1, "Smith, Mr. Adams"
2, "McAdams, Mrs. Audrey"
3, "McAdams, Doctor John"
4, "Missing Value"'''
csv_lines = csv.split('\n')
for line in csv_lines:
id = line.split(',')[0]
name = line[len(id)+3:-1]
split = name.split(', ')
last_name = split[0]
if len(split) < 2:
first_name = last_name
prefix = last_name
else:
prefix = split[1].split(' ')[0]
first_name = split[1][len(prefix)+1:]
row_dict = {'id': id, 'name': {'last_name': last_name, 'prefix': prefix, 'first_name': first_name}}
json_data = json.dumps(row_dict)
print(json_data)
为什么您想要的结果中的名称条目是一个字典列表,而不仅仅是一个字典?您需要编写一个函数,将名称解析到您想要的字典中。不能只使用split,因为这不会提取前缀,也不会将缺少的值放入所有缺少的字段中。名称有许多不同的格式,因此这可能会很复杂,并且在处理不当的情况下会产生错误。这就是为什么表单通常对名字、姓氏、标题等有单独的输入字段。对于最终输出,请查看此项。我现在正在使用它,虽然不完美,但肯定比从头开始实现要好。如果名称dict确实必须在列表中,您可以通过更改创建行dict的行来实现它。
import json
csv = '''1, "Smith, Mr. Adams"
2, "McAdams, Mrs. Audrey"
3, "McAdams, Doctor John"
4, "Missing Value"'''
csv_lines = csv.split('\n')
for line in csv_lines:
id = line.split(',')[0]
name = line[len(id)+3:-1]
split = name.split(', ')
last_name = split[0]
if len(split) < 2:
first_name = last_name
prefix = last_name
else:
prefix = split[1].split(' ')[0]
first_name = split[1][len(prefix)+1:]
row_dict = {'id': id, 'name': {'last_name': last_name, 'prefix': prefix, 'first_name': first_name}}
json_data = json.dumps(row_dict)
print(json_data)
{"id": "1", "name": {"last_name": "Smith", "prefix": "Mr.", "first_name": "Adams"}}
{"id": "2", "name": {"last_name": "McAdams", "prefix": "Mrs.", "first_name": "Audrey"}}
{"id": "3", "name": {"last_name": "McAdams", "prefix": "Doctor", "first_name": "John"}}
{"id": "4", "name": {"last_name": "Missing Value", "prefix": "Missing Value", "first_name": "Missing Value"}}