利用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语言使用技巧分享
May 31 Python
Python实现读取并保存文件的类
May 11 Python
Python实现自动上京东抢手机
Feb 06 Python
Python各类图像库的图片读写方式总结(推荐)
Feb 23 Python
python中的字符串内部换行方法
Jul 19 Python
selenium + python 获取table数据的示例讲解
Oct 13 Python
新手入门Python编程的8个实用建议
Jul 12 Python
Django logging配置及使用详解
Jul 23 Python
Python selenium抓取虎牙短视频代码实例
Mar 02 Python
Pyecharts地图显示不完成问题解决方案
May 11 Python
Python爬虫抓取指定网页图片代码实例
Jul 24 Python
Python多线程的退出控制实现
Aug 10 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安全性漫谈
2012/06/28 PHP
PHP中__FILE__、dirname与basename用法实例分析
2014/12/01 PHP
PHP中字符串长度的截取用法示例
2017/01/12 PHP
PHP实现转盘抽奖算法分享
2020/04/15 PHP
基于JQuery的一个简单的鼠标跟随提示效果
2010/09/23 Javascript
JavaSript中变量的作用域闭包的深入理解
2014/05/12 Javascript
jQuery实现炫酷的鼠标轨迹特效
2015/02/01 Javascript
JavaScript操作Oracle数据库示例
2015/03/06 Javascript
Jquery中的$.each获取各种返回类型数据的使用方法
2015/05/03 Javascript
AngularJS中的过滤器使用详解
2015/06/16 Javascript
AngularJs中route的使用方法和配置
2016/02/04 Javascript
Bootstrap modal 多弹窗之叠加显示不出弹窗问题的解决方案
2017/02/23 Javascript
Angular 2父子组件数据传递之@ViewChild获取子组件详解
2017/07/04 Javascript
php 解压zip压缩包内容到指定目录的实例
2018/01/23 Javascript
在vue项目中使用md5加密的方法
2018/09/14 Javascript
微信小程序实现的绘制table表格功能示例
2019/04/26 Javascript
原生js实现trigger方法示例代码
2019/05/22 Javascript
解决LayUI数据表格复选框不居中显示的问题
2019/09/25 Javascript
让你30分钟快速掌握vue3教程
2020/10/26 Javascript
使用Python脚本和ADB命令实现卸载App
2017/02/10 Python
Python3.6安装及引入Requests库的实现方法
2018/01/24 Python
Python实现的KMeans聚类算法实例分析
2018/12/29 Python
python 设置输出图像的像素大小方法
2019/07/04 Python
django2.2安装错误最全的解决方案(小结)
2019/09/24 Python
基于opencv的selenium滑动验证码的实现
2020/07/24 Python
基于IE10/HTML5 开发
2013/04/22 HTML / CSS
详解基于canvas的视频遮罩插件
2018/01/04 HTML / CSS
英国信箱在线鲜花速递公司:Bloom & Wild
2019/03/10 全球购物
意大利领先的奢侈品在线时装零售商:MCLABELS
2020/10/13 全球购物
长曲棍球装备:Lacrosse Monkey
2020/12/02 全球购物
css animation配合SVG制作能量流动效果
2021/03/24 HTML / CSS
历史专业毕业生的自我鉴定
2013/11/15 职场文书
硕士学位论文评语
2014/12/31 职场文书
成本低的5个创业项目:投资小、赚钱快
2019/08/20 职场文书
如何在centos上使用yum安装rabbitmq-server
2021/03/31 Servers
为什么你写的height:100%不起作用
2021/05/10 HTML / CSS