利用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处理文件目录的相关方法
Oct 16 Python
python生成词云的实现方法(推荐)
Jun 13 Python
Python 绘图库 Matplotlib 入门教程
Apr 19 Python
Python 限制线程的最大数量的方法(Semaphore)
Feb 22 Python
Python面向对象进阶学习
May 21 Python
python实现在cmd窗口显示彩色文字
Jun 24 Python
python输出决策树图形的例子
Aug 09 Python
Tensorflow tf.nn.depthwise_conv2d如何实现深度卷积的
Apr 20 Python
python 实现简易的记事本
Nov 30 Python
用python发送微信消息
Dec 21 Python
python中pivot()函数基础知识点
Jan 03 Python
这样写python注释让代码更加的优雅
Jun 02 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 常见郁闷问题答解
2006/11/25 PHP
php allow_url_include的应用和解释
2010/04/22 PHP
PHP根据传来的16进制颜色代码自动改变背景颜色
2014/06/13 PHP
微信access_token的获取开发示例
2015/04/16 PHP
PHP笛卡尔积实现算法示例
2018/07/30 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
2020/03/24 PHP
Javascript valueOf 使用方法
2008/12/28 Javascript
jquery中的 $("#jb51")与document.getElementById("jb51") 的区别
2011/07/26 Javascript
jQuery数组处理代码详解(含实例演示)
2012/02/03 Javascript
关于Javascript作用域链的八点总结
2013/12/06 Javascript
js中判断对象是否为空的三种实现方法
2013/12/23 Javascript
JS调用页面表格导出excel示例代码
2014/03/18 Javascript
js检测浏览器版本、核心、是否移动端示例
2014/04/24 Javascript
jQuery判断一个元素是否可见的方法
2015/06/05 Javascript
jQuery页面刷新(局部、全部)问题分析
2016/01/09 Javascript
Linux下为Node.js程序配置MySQL或Oracle数据库的方法
2016/03/19 Javascript
详解JavaScript的内置对象
2016/12/07 Javascript
原生js封装自定义滚动条
2017/03/24 Javascript
vue.js实现用户评论、登录、注册、及修改信息功能
2020/05/30 Javascript
Node.js操作redis实现添加查询功能
2017/05/25 Javascript
nodejs操作mongodb的填删改查模块的制作及引入实例
2018/01/02 NodeJs
从vue基础开始创建一个简单的增删改查的实例代码(推荐)
2018/02/11 Javascript
vue轻量级框架无法获取到vue对象解决方法
2019/05/12 Javascript
Javascript ParentNode和ChildNode接口原理解析
2020/03/16 Javascript
python基础教程之简单入门说明(变量和控制语言使用方法)
2014/03/25 Python
python 字典 按key值大小 倒序取值的实例
2018/07/06 Python
django2.0扩展用户字段示例
2019/02/13 Python
Python爬虫定时计划任务的几种常见方法(推荐)
2021/01/15 Python
很酷的小工具和电子产品商城:GearBest
2016/11/19 全球购物
Bibloo荷兰:女士、男士和儿童的服装、鞋子和配饰
2019/02/25 全球购物
采购经理岗位职责
2014/02/16 职场文书
综治维稳工作承诺书
2014/08/30 职场文书
2015年元旦文艺晚会总结(学院)
2014/11/28 职场文书
施工安全保证书
2015/05/09 职场文书
运动会闭幕式通讯稿
2015/07/18 职场文书
Python可视化学习之matplotlib内置单颜色
2022/02/24 Python