利用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之dict()的操作方法
Sep 24 Python
python执行get提交的方法
Apr 29 Python
Python实现Linux中的du命令
Jun 12 Python
python3 selenium 切换窗口的几种方法小结
May 21 Python
python3实现163邮箱SMTP发送邮件
May 22 Python
python查看模块,对象的函数方法
Oct 16 Python
pytorch 调整某一维度数据顺序的方法
Dec 08 Python
对Python中的条件判断、循环以及循环的终止方法详解
Feb 08 Python
tensorflow 模型权重导出实例
Jan 24 Python
keras 自定义loss层+接受输入实例
Jun 28 Python
python statsmodel的使用
Dec 21 Python
分享Python获取本机IP地址的几种方法
Mar 17 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
咖啡因含量是由谁决定的?低因咖啡怎么来?低因咖啡适合什么人喝
2021/03/06 新手入门
通过ICQ网关发送手机短信的PHP源程序
2006/10/09 PHP
基于mysql的论坛(2)
2006/10/09 PHP
用PHP实现Ftp用户的在线管理的代码
2007/03/06 PHP
php中大括号作用介绍
2012/03/22 PHP
PHP编写学校网站上新生注册登陆程序的实例分享
2016/03/21 PHP
Zend Framework校验器Zend_Validate用法详解
2016/12/09 PHP
php检查函数必传参数是否存在的实例详解
2017/08/28 PHP
tp5(thinkPHP5)框架实现多数据库查询的方法
2019/01/10 PHP
使用jQuery.fn自定义jQuery翻页插件
2013/01/20 Javascript
往光标所在位置插入值的js代码
2013/09/22 Javascript
node.js中的fs.createWriteStream方法使用说明
2014/12/17 Javascript
JavaScript下的时间格式处理函数Date.prototype.format
2016/01/27 Javascript
Javascript日期格式化format函数的使用方法
2016/08/30 Javascript
ReactJS实现表单的单选多选和反选的示例
2017/10/13 Javascript
详解使用webpack构建多页面应用
2017/12/21 Javascript
利用Vue-draggable组件实现Vue项目中表格内容的拖拽排序
2019/06/07 Javascript
vue项目打包之开发环境和部署环境的实现
2020/04/23 Javascript
Vue自动构建发布脚本的方法示例
2020/07/24 Javascript
Python MySQLdb模块连接操作mysql数据库实例
2015/04/08 Python
Python中的错误和异常处理简单操作示例【try-except用法】
2017/07/25 Python
Python绘制3d螺旋曲线图实例代码
2017/12/20 Python
python实现QQ空间自动点赞功能
2019/04/09 Python
Python单元测试及unittest框架用法实例解析
2020/07/09 Python
python利用platform模块获取系统信息
2020/10/09 Python
CSS3美化表单控件全集
2016/06/29 HTML / CSS
纯CSS3实现圆圈动态发光特效动画的示例代码
2021/03/08 HTML / CSS
澳大利高级泳装品牌:Bondi Born
2018/05/23 全球购物
斯图尔特·韦茨曼鞋加拿大官网:Stuart Weitzman加拿大
2019/10/13 全球购物
计算机应用毕业生自荐信
2013/10/23 职场文书
英文自荐信
2013/12/15 职场文书
行政监察建议书
2014/05/19 职场文书
工程部岗位职责范本
2015/04/11 职场文书
初一军训感言
2015/08/01 职场文书
聊聊Python中关于a=[[]]*3的反思
2021/06/02 Python
SpringCloud Feign请求头删除修改的操作代码
2022/03/20 Java/Android