利用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中还原JavaScript的escape函数编码后字符串的方法
Aug 22 Python
Python程序中使用SQLAlchemy时出现乱码的解决方案
Apr 24 Python
Python实现扫描局域网活动ip(扫描在线电脑)
Apr 28 Python
python 实现登录网页的操作方法
May 11 Python
Python实现使用request模块下载图片demo示例
May 24 Python
简单了解django orm中介模型
Jul 30 Python
selenium2.0中常用的python函数汇总
Aug 05 Python
PyTorch实现更新部分网络,其他不更新
Dec 31 Python
python如何获取apk的packagename和activity
Jan 10 Python
Python Pandas数据分析工具用法实例
Nov 05 Python
python生成word合同的实例方法
Jan 12 Python
python 批量将中文名转换为拼音
Feb 07 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
解析csv数据导入mysql的方法
2013/07/01 PHP
实现在同一方法中获取当前方法中新赋值的session值解决方法
2014/06/26 PHP
php生成xml时添加CDATA标签的方法
2014/10/17 PHP
phplot生成图片类用法详解
2015/01/06 PHP
php有效防止同一用户多次登录
2015/11/19 PHP
ThinkPHP5.0框架验证码功能实现方法【基于第三方扩展包】
2019/03/11 PHP
jQuery实现的Email中的收件人效果(按del键删除)
2011/03/20 Javascript
基于jquery点击自以外任意处,关闭自身的代码
2012/02/10 Javascript
NodeJS Web应用监听sock文件实例
2015/02/18 NodeJs
javascript定义类和类的实现实例详解
2015/12/01 Javascript
jQuery利用sort对DOM元素进行排序操作
2016/11/07 Javascript
bootstrap多种样式进度条展示
2016/12/20 Javascript
jQuery实现CheckBox全选、全不选功能
2017/01/11 Javascript
无限循环轮播图之运动框架(原生JS实现)
2017/10/01 Javascript
nodejs 使用http进行post或get请求的实例(携带cookie)
2019/01/03 NodeJs
详解vue 自定义组件使用v-model 及探究其中原理
2019/10/11 Javascript
使用webpack将ES6转化ES5的实现方法
2019/10/13 Javascript
js实现数字滚动特效
2019/12/16 Javascript
JS实现密码框效果
2020/09/10 Javascript
python如何在列表、字典中筛选数据
2018/03/19 Python
tensorflow 恢复指定层与不同层指定不同学习率的方法
2018/07/26 Python
Python定义函数功能与用法实例详解
2019/04/08 Python
python3读取csv文件任意行列代码实例
2020/01/13 Python
python系统指定文件的查找只输出目录下所有文件及文件夹
2020/01/19 Python
浅谈在django中使用redirect重定向数据传输的问题
2020/03/13 Python
使用keras实现densenet和Xception的模型融合
2020/05/23 Python
python中os包的用法
2020/06/01 Python
使用python实现名片管理系统
2020/06/18 Python
浅谈Python中的继承
2020/06/19 Python
Python利用matplotlib绘制折线图的新手教程
2020/11/05 Python
关于h5中的fetch方法解读(小结)
2017/11/15 HTML / CSS
Smashbox英国官网:美国知名彩妆品牌
2017/11/13 全球购物
俄语专业毕业生推荐信
2013/10/28 职场文书
离婚协议书范本(2014版)
2014/09/28 职场文书
质量保证书怎么写
2015/02/27 职场文书
2015最新民情日记范文
2015/06/26 职场文书