利用python将json数据转换为csv格式的方法


Posted in Python onMarch 22, 2018

假设.json文件中存储的数据为:

{"type": "Point", "link": "http://www.dianping.com/newhotel/22416995", "coordinates": [116.37256372996957, 40.39798447055443], "category": "经济型", "name": "北京荷塘山庄", "count": "278", "address": "北京市怀柔区黄花城村安四路", "price": "380"}
{"type": "Point", "link": "http://www.dianping.com/newhotel/19717653", "coordinates": [116.56881588256466, 40.43310967948417], "category": "经济型", "name": "慕田峪长城鱼师傅乡村酒店", "count": "89", "address": "北京市怀柔区渤海镇苇店村(慕田峪长城下3公里处,近怀黄路)", "price": "258"}
{"type": "Point", "link": "http://www.dianping.com/newhotel/58365289", "coordinates": [116.62874974822378, 40.45610264855833], "category": "经济型", "name": "北京蜜桃儿亲子客栈", "count": "119", "address": "北京市怀柔区神堂峪风景区下官地11号", "price": "549"}

现在需要将上面的这些数据存为csv格式,其中字典的keys为csv中的属性名称,字典的values为csv中属性对应的值。

如果只需要按照json的keys来生成csv,那么操作比较简单,直接按照下面的方法即可:

#-*-coding:utf-8-*-
import csv
import json
import sys
import codecs
def trans(path):
 jsonData = codecs.open(path+'.json', 'r', 'utf-8')
 # csvfile = open(path+'.csv', 'w') # 此处这样写会导致写出来的文件会有空行
 # csvfile = open(path+'.csv', 'wb') # python2下
 csvfile = open(path+'.csv', 'w', newline='') # python3下
 writer = csv.writer(csvfile, delimiter='\t')
 flag = True
 for line in jsonData:
  dic = json.loads(line[0:-1])
  if flag:
   # 获取属性列表
   keys = list(dic.keys())
   print (keys)
   writer.writerow(keys) # 将属性列表写入csv中
   flag = False
  else:
   # 读取json数据的每一行,将values数据一次一行的写入csv中
   writer.writerow(list(dic.values()))
 jsonData.close()
 csvfile.close()
if __name__ == '__main__':
 path=str(sys.argv[1]) # 获取path参数
 print (path)
 trans(path)

在python3下运行,命令行输入

python C:\Users\MaMQ\Documents\jsonToCsv.py C:\Users\MaMQ\Documents\data\geoFood

其中第三个参数为需要转换的文件的路径和其名称,将其后缀删除。运行文件后即可得到转换后的csv文件。

如果需要对json文件中每个字典的key字段进行修改,比如需要将上面dict中的coordinate中的经纬度数据取出来存为x、y数据,则可以按照下面的方法(此方法还可以调整每个属性显示的顺序,效果更好一点):

import csv
import json
import sys
import codecs
def trans(path):
 jsonData = codecs.open(path+'.json', 'r', 'utf-8')
 # csvfile = open(path+'.csv', 'w') # 此处这样写会导致写出来的文件会有空行
 # csvfile = open(path+'.csv', 'wb') # python2下
 csvfile = open(path+'.csv', 'w', newline='') # python3下
 writer = csv.writer(csvfile, delimiter='\t')
 keys=['id', 'name', 'category', 'price', 'count', 'type', 'address', 'link', 'x', 'y']
 writer.writerow(keys)
 i = 1
 for dic in jsonData:
  dic = json.loads(dic[0:-1])
  x = dic['coordinates'][0]
  y = dic['coordinates'][1]
  writer.writerow([str(i),dic['name'],dic['category'],dic['price'],dic['count'],dic['type'],dic['address'],dic['link'],x,y])
  i += 1
 jsonData.close()
 csvfile.close()
if __name__ == '__main__':
 path = str(sys.argv[1])
 print (path)
 trans(path)

运行方法同上。

json文件是我在大众点评抓取的数据,存储格式为utf-8。建议使用codecs包来读取json数据,可指定编码方式。

jsonData = codecs.open(path + '.json', 'r', encoding='utf-8')

欢迎交流讨论。

以上这篇利用python将json数据转换为csv格式的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现Linux下守护进程的编写方法
Aug 22 Python
复习Python中的字符串知识点
Apr 14 Python
使用Python操作MySQL的一些基本方法
Aug 16 Python
python3.4实现邮件发送功能
May 28 Python
在Pycharm中对代码进行注释和缩进的方法详解
Jan 20 Python
Pycharm运行加载文本出现错误的解决方法
Jun 27 Python
python 随机森林算法及其优化详解
Jul 11 Python
利用python-pypcap抓取带VLAN标签的数据包方法
Jul 23 Python
python中添加模块导入路径的方法
Feb 03 Python
关于Numpy之repeat、tile的用法总结
Jun 02 Python
python代码实现备忘录案例讲解
Jul 26 Python
Python如何快速找到多个字典中的公共键(key)
Apr 29 Python
解决python3中解压zip文件是文件名乱码的问题
Mar 22 #Python
Python爬虫工程师面试问题总结
Mar 22 #Python
Python入门必须知道的11个知识点
Mar 21 #Python
python使用Tesseract库识别验证
Mar 21 #Python
python如何派生内置不可变类型并修改实例化行为
Mar 21 #Python
python如何通过实例方法名字调用方法
Mar 21 #Python
python如何为被装饰的函数保留元数据
Mar 21 #Python
You might like
CodeIgniter配置之config.php用法实例分析
2016/01/19 PHP
javascript 自动填写表单的实现方法
2010/04/09 Javascript
js实现身份证号码验证的简单实例
2014/02/19 Javascript
IE中鼠标经过option触发mouseout的解决方法
2015/01/29 Javascript
JavaScript操作Oracle数据库示例
2015/03/06 Javascript
利用CSS、JavaScript及Ajax实现图片预加载的方法
2016/11/29 Javascript
Vue2.0 vue-source jsonp 跨域请求
2017/08/04 Javascript
JavaScript生成简单等差数列
2017/11/28 Javascript
JS抛物线动画实例制作
2018/02/24 Javascript
使用node.js实现微信小程序实时聊天功能
2018/08/13 Javascript
vue axios基于常见业务场景的二次封装的实现
2018/09/21 Javascript
详解Vue之事件处理
2020/07/10 Javascript
[02:40]DOTA2英雄基础教程 巨牙海民
2013/12/23 DOTA
Python中关于使用模块的基础知识
2015/05/24 Python
Python实现文件信息进行合并实例代码
2018/01/17 Python
Python处理文本换行符实例代码
2018/02/03 Python
python中数据爬虫requests库使用方法详解
2018/02/11 Python
Python使用gRPC传输协议教程
2018/10/16 Python
11个Python3字典内置方法大全与示例汇总
2019/05/13 Python
python读取.mat文件的数据及实例代码
2019/07/12 Python
Python利用requests模块下载图片实例代码
2019/08/12 Python
Python如何把多个PDF文件合并代码实例
2020/02/13 Python
HTML5 input placeholder 颜色修改示例
2014/05/30 HTML / CSS
中软国际Java程序员机试题
2012/08/19 面试题
职称自我鉴定
2013/10/15 职场文书
车间班长岗位职责
2013/11/30 职场文书
大三学生入党思想汇报
2014/01/02 职场文书
财务人员担保书
2014/05/13 职场文书
2014年项目经理工作总结
2014/11/24 职场文书
2014年图书管理员工作总结
2014/12/01 职场文书
司机岗位职责
2015/02/04 职场文书
2015年度学校卫生工作总结
2015/05/12 职场文书
亮剑精神观后感
2015/06/05 职场文书
公司的力量观后感
2015/06/05 职场文书
四十年同学聚会致辞
2015/07/28 职场文书
Css预编语言及区别详解
2021/04/25 HTML / CSS