利用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计算最大优先级队列实例
Dec 18 Python
Python实现Tab自动补全和历史命令管理的方法
Mar 12 Python
python numpy函数中的linspace创建等差数列详解
Oct 13 Python
django的登录注册系统的示例代码
May 14 Python
对Python实现简单的API接口实例讲解
Dec 10 Python
Python解决线性代数问题之矩阵的初等变换方法
Dec 12 Python
python调用java的jar包方法
Dec 15 Python
python连接打印机实现打印文档、图片、pdf文件等功能
Feb 07 Python
如何使用Python抓取网页tag操作
Feb 14 Python
python不同系统中打开方法
Jun 23 Python
Python性能测试工具Locust安装及使用
Dec 01 Python
python 开心网和豆瓣日记爬取的小爬虫
May 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
我用php+mysql写的留言本
2006/10/09 PHP
常见php数据文件缓存类汇总
2014/12/05 PHP
详解PHP实现异步调用的4种方法
2016/03/14 PHP
php实现session共享的实例方法
2019/09/19 PHP
对联广告js flash激活
2006/10/19 Javascript
innerHTML,outerHTML,innerTEXT三者之间的区别
2007/01/28 Javascript
js 页面输出值
2008/11/30 Javascript
jquery 插件实现图片延迟加载效果代码
2010/02/06 Javascript
javascript setAttribute, getAttribute 在不同浏览器上的不同表现
2010/08/05 Javascript
JQuery中判断一个元素下面是否有内容或者有某个标签的判断代码
2012/02/02 Javascript
js如何获取兄弟、父类等节点
2014/01/06 Javascript
jquery获取颜色在ie和ff下的区别示例介绍
2014/03/28 Javascript
JavaScript实现的内存数据库LokiJS介绍和入门实例
2014/11/17 Javascript
JavaScript判断表单提交时哪个radio按钮被选中的方法
2015/03/21 Javascript
JavaScript中的boolean布尔值使用学习及相关技巧讲解
2016/05/26 Javascript
解决Vue.js 2.0 有时双向绑定img src属性失败的问题
2018/03/14 Javascript
socket在egg中的使用实例代码详解
2019/05/30 Javascript
vue中组件通信的八种方式(值得收藏!)
2019/08/09 Javascript
jQuery实现动态操作table行
2020/11/23 jQuery
[01:15:45]DOTA2上海特级锦标赛B组小组赛#1 Alliance VS Spirit第一局
2016/02/26 DOTA
python开发之IDEL(Python GUI)的使用方法图文详解
2015/11/12 Python
python3库numpy数组属性的查看方法
2018/04/17 Python
11个Python Pandas小技巧让你的工作更高效(附代码实例)
2019/04/30 Python
Python面向对象之类和实例用法分析
2019/06/08 Python
详解pandas赋值失败问题解决
2020/11/29 Python
python 进制转换 int、bin、oct、hex的原理
2021/01/13 Python
Css3新特性应用之形状总结
2016/12/08 HTML / CSS
html5教程画矩形代码分享
2013/12/04 HTML / CSS
阿里云:Aliyun.com
2017/02/15 全球购物
.NET概念性的面试题
2012/02/29 面试题
英语求职信范文
2014/05/23 职场文书
办公室文员工作自我鉴定
2014/09/19 职场文书
幼儿教师2014年度工作总结
2014/12/16 职场文书
担保书范本
2015/01/20 职场文书
监理中标通知书
2015/04/16 职场文书
鲁滨逊漂流记读书笔记
2015/06/26 职场文书