利用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实现的守护进程(Daemon)用法实例
Jun 02 Python
Python2.x与Python3.x的区别
Jan 14 Python
Linux下为不同版本python安装第三方库
Aug 31 Python
Python中的sort()方法使用基础教程
Jan 08 Python
Django实现登录随机验证码的示例代码
Jun 20 Python
numpy返回array中元素的index方法
Jun 27 Python
使用Python编写Prometheus监控的方法
Oct 15 Python
Python实现的爬取百度文库功能示例
Feb 16 Python
运用PyTorch动手搭建一个共享单车预测器
Aug 06 Python
pytorch实现onehot编码转为普通label标签
Jan 02 Python
Python连接Oracle之环境配置、实例代码及报错解决方法详解
Feb 11 Python
浅谈怎么给Python添加类型标注
Jun 08 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
php集成套件服务器xampp安装使用教程(适合第一次玩PHP的新手)
2015/06/03 PHP
分享一个漂亮的php验证码类
2016/09/29 PHP
PHP 中常量的知识整理
2017/04/14 PHP
PHP全局使用Laravel辅助函数dd
2019/12/26 PHP
jQuery+CSS 实现的超Sexy下拉菜单
2010/01/17 Javascript
js 使用form表单select类实现级联菜单效果
2012/12/19 Javascript
jquery解析xml字符串简单示例
2014/04/11 Javascript
js加减乘除丢失精度问题解决方法
2014/05/16 Javascript
NodeJs——入门必看攻略
2016/06/27 NodeJs
Bootstrap下拉菜单样式
2017/02/07 Javascript
JavaScript函数节流的两种写法
2017/04/07 Javascript
VueJS如何引入css或者less文件的一些坑
2017/04/25 Javascript
JS如何实现在页面上快速定位(锚点跳转问题)
2017/08/14 Javascript
angularJs中$http获取后台数据的实例讲解
2018/08/08 Javascript
基于Vue组件化的日期联动选择器功能的实现代码
2018/11/30 Javascript
详解用JS添加和删除class类名
2019/03/25 Javascript
JS中getElementsByClassName与classList兼容性问题解决方案分析
2019/08/07 Javascript
浅析Vue中拆分视图层代码的5点建议
2019/08/15 Javascript
ElementUI之Message功能拓展详解
2019/10/18 Javascript
[02:38]DOTA2超级联赛专访Loda 认为IG世界最强
2013/05/27 DOTA
[03:07]DOTA2英雄基础教程 冰霜诅咒极寒幽魂
2013/12/06 DOTA
[01:24]2014DOTA2 TI第二日 YYF表示这届谁赢都有可能
2014/07/11 DOTA
python操作mysql中文显示乱码的解决方法
2014/10/11 Python
Python 序列化 pickle/cPickle模块使用介绍
2014/11/30 Python
python实现将文本转换成语音的方法
2015/05/28 Python
python设置环境变量的作用和实例
2019/07/09 Python
Django  ORM 练习题及答案
2019/07/19 Python
python UDP(udp)协议发送和接收的实例
2019/07/22 Python
python3.7 的新特性详解
2019/07/25 Python
新加坡交友网站:be2新加坡
2019/04/10 全球购物
印度第一网上礼品店:IGP.com
2020/02/06 全球购物
如何通过 CSS 写出火焰效果
2021/03/24 HTML / CSS
幼儿园英语教学反思
2014/01/30 职场文书
十周年庆典策划方案
2014/06/03 职场文书
遗失说明具结保证书
2015/02/26 职场文书
2015年节能减排工作总结
2015/05/14 职场文书