将 JSON 转换为缺少字段名的 CSV
Converting JSON to CSV with missing fieldnames
我很难将 JSON 转换为 csv,因为某些记录上的名称没有显示。例如:
[{device: 1,
name: 'John',
age: 25,
city: 'Denver'
},
{device: 2,
name: 'Jake',
age: 24,
city: 'New York'
},
{device: 3,
name: 'Phil',
age: 23}]
它变得更加困难,因为它有几千行,有时城市是已知的,有时则不是。
我想将这些放在一个 csv 文件中,将 Phil 的城市留空。
在 json 到 csv 模块中可能有一个内置的方法来执行此操作,但您可以遍历所有指令并添加缺少的键:
my_list = [{'device':1,
'name':'John',
'age':25,
'city': 'Denver' },
{'device':2,
'name':'Jake',
'age':24,
'city': 'New York'
},
{'device':3,
'name':'Phil',
'age':23}]
keys_and_default = {
'device': -1,
'name': 'N/A',
'age': -1,
'city': 'N/A'
}
for dic in my_list:
for key, val in keys_and_default.items():
if key not in dic:
dic[key] = val
print(my_list)
你可以使用这个:
import json
import csv
js = """[{"device": 1,
"name": "John",
"age": 25,
"city": "Denver"
},
{"device": 2,
"name": "Jake",
"age": 24,
"city": "New York"
},
{"device": 3,
"name": "Phil",
"age": 23}]
"""
js = json.loads(js)
with open( 'result.csv', 'w' ) as csv_file:
writer = csv.writer( csv_file )
columns = list({column for row in js for column in row.keys()})
writer.writerow( columns )
for row in js:
writer.writerow([None if column not in row else row[column] for column in columns])
这甚至适用于不同的列名和更多的列!
我很难将 JSON 转换为 csv,因为某些记录上的名称没有显示。例如:
[{device: 1,
name: 'John',
age: 25,
city: 'Denver'
},
{device: 2,
name: 'Jake',
age: 24,
city: 'New York'
},
{device: 3,
name: 'Phil',
age: 23}]
它变得更加困难,因为它有几千行,有时城市是已知的,有时则不是。
我想将这些放在一个 csv 文件中,将 Phil 的城市留空。
在 json 到 csv 模块中可能有一个内置的方法来执行此操作,但您可以遍历所有指令并添加缺少的键:
my_list = [{'device':1,
'name':'John',
'age':25,
'city': 'Denver' },
{'device':2,
'name':'Jake',
'age':24,
'city': 'New York'
},
{'device':3,
'name':'Phil',
'age':23}]
keys_and_default = {
'device': -1,
'name': 'N/A',
'age': -1,
'city': 'N/A'
}
for dic in my_list:
for key, val in keys_and_default.items():
if key not in dic:
dic[key] = val
print(my_list)
你可以使用这个:
import json
import csv
js = """[{"device": 1,
"name": "John",
"age": 25,
"city": "Denver"
},
{"device": 2,
"name": "Jake",
"age": 24,
"city": "New York"
},
{"device": 3,
"name": "Phil",
"age": 23}]
"""
js = json.loads(js)
with open( 'result.csv', 'w' ) as csv_file:
writer = csv.writer( csv_file )
columns = list({column for row in js for column in row.keys()})
writer.writerow( columns )
for row in js:
writer.writerow([None if column not in row else row[column] for column in columns])
这甚至适用于不同的列名和更多的列!