我有一个list
的JSON我打印它是这样的:
for item in points:
print(format(item))
结果如下:
{u'TEMP': 30, u'LIGHT': 315, u'HUMIDITY': 30.9, u'SOURCE': u'arduino_1', u'PLACE': u'kitchen', u'time': u'2016-12-31T11:18:38.822822913Z'}
{u'TEMP': 31, u'LIGHT': 325.5, u'HUMIDITY': 31.93, u'SOURCE': u'arduino_1', u'PLACE': u'garage', u'time': u'2016-12-31T11:18:39.919019993Z'}
{u'TEMP': 32, u'LIGHT': 336, u'HUMIDITY': 32.96, u'SOURCE': u'arduino_1', u'PLACE': u'living_room', u'time': u'2016-12-31T11:18:41.014792508Z'}
{u'TEMP': 33, u'LIGHT': 346.5, u'HUMIDITY': 33.99, u'SOURCE': u'arduino_1', u'PLACE': u'basement', u'time': u'2016-12-31T11:18:42.11100167Z'}
首先,我的数据源出现问题,打印出“你好”的信息。每个项目前的字符。
我想用CSV文件中的每一行写一个这样的格式(第一行是CSV标题)
TIME,SOURCE,PLACE,TEMP,LIGHT,HUMIDITY
2016-12-31T11:18:38.822822913Z,arduino_1,kitchen,30,315,30.9
我正在尝试使用csv
包执行此操作。但我不确定如何从列表中的项目中获取每一行的数据,并更改它们在生成的CSV文件中的显示顺序:
with open('output.csv', 'wb') as csvfile:
writer = csv.writer(csvfile, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL)
writer.writerow(points)
感谢您对Python菜鸟的帮助。
答案 0 :(得分:6)
csv.writer
用于列表或元组列表。因此,将其用于dicts列表会触发“序列预期”错误。相反,请使用csv.DictWriter
,如下所示:
import csv
data=[{u'TEMP': 30, u'LIGHT': 315, u'HUMIDITY': 30.9, u'SOURCE': u'arduino_1', u'PLACE': u'kitchen', u'time': u'2016-12-31T11:18:38.822822913Z'},
{u'TEMP': 31, u'LIGHT': 325.5, u'HUMIDITY': 31.93, u'SOURCE': u'arduino_1', u'PLACE': u'garage', u'time': u'2016-12-31T11:18:39.919019993Z'},
{u'TEMP': 32, u'LIGHT': 336, u'HUMIDITY': 32.96, u'SOURCE': u'arduino_1', u'PLACE': u'living_room', u'time': u'2016-12-31T11:18:41.014792508Z'},
{u'TEMP': 33, u'LIGHT': 346.5, u'HUMIDITY': 33.99, u'SOURCE': u'arduino_1', u'PLACE': u'basement', u'time': u'2016-12-31T11:18:42.11100167Z'}]
with open("output.csv","w",newline="") as f: # python 2: open("output.csv","wb")
title = "time,SOURCE,PLACE,TEMP,LIGHT,HUMIDITY".split(",") # quick hack
cw = csv.DictWriter(f,title,delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL)
cw.writeheader()
cw.writerows(data)
通过重复使用您提供的顺序来完成标题顺序(否则顺序是字典顺序,而不是您想要的顺序)。
编写标题以获取标题,然后在字典列表中使用writerows
来编写数据。
输出:
time,SOURCE,PLACE,TEMP,LIGHT,HUMIDITY
2016-12-31T11:18:38.822822913Z,arduino_1,kitchen,30,315,30.9
2016-12-31T11:18:39.919019993Z,arduino_1,garage,31,325.5,31.93
2016-12-31T11:18:41.014792508Z,arduino_1,living_room,32,336,32.96
2016-12-31T11:18:42.11100167Z,arduino_1,basement,33,346.5,33.99
请注意,担心您的u
前缀不会出现在结果中。这只是一个表征角色。
答案 1 :(得分:2)
Pandas有许多I / O工具可以读/写许多文件。我想,您正在尝试将JSON文件转换为CSV格式。
所以你可以这样做:
import pandas as pd
data = pd.read_json(path_to_input_file)
data.to_csv(path_to_csv_output_file)