利用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 3.x 新特性及10大变化
Jun 12 Python
Python装饰器使用实例:验证参数合法性
Jun 24 Python
Python cx_freeze打包工具处理问题思路及解决办法
Feb 13 Python
Python实现比较扑克牌大小程序代码示例
Dec 06 Python
Python处理文本换行符实例代码
Feb 03 Python
Python中协程用法代码详解
Feb 10 Python
python开启摄像头以及深度学习实现目标检测方法
Aug 03 Python
Python 写入训练日志文件并控制台输出解析
Aug 13 Python
python如何查看安装了的模块
Jun 23 Python
Python基于Faker假数据构造库
Nov 30 Python
python 使用csv模块读写csv格式文件的示例
Dec 02 Python
Pycharm 如何一键加引号的方法步骤
Feb 05 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读取txt文件的内容并赋值给数组的代码
2011/11/03 PHP
解析php中获取系统信息的方法
2013/06/25 PHP
PHP读取txt文本文件并分页显示的方法
2015/03/11 PHP
[原创]php使用strpos判断字符串中数字类型子字符串出错的解决方法
2017/04/01 PHP
extjs 学习笔记(一) 一些基础知识
2009/10/13 Javascript
jQuery-onload让第一次页面加载时图片是淡入方式显示
2012/05/23 Javascript
Node.js生成HttpStatusCode辅助类发布到npm
2013/04/09 Javascript
javascript拖拽应用实例(二)
2016/03/25 Javascript
JavaScript数组操作函数汇总
2016/08/05 Javascript
Jquery Easyui分割按钮组件SplitButton使用详解(17)
2016/12/18 Javascript
Vue form 表单提交+ajax异步请求+分页效果
2017/04/22 Javascript
vue2.0在没有dev-server.js下的本地数据配置方法
2018/02/23 Javascript
JS原生瀑布流效果实现
2019/04/26 Javascript
原生js拖拽实现图形伸缩效果
2020/02/10 Javascript
vue内置组件component--通过is属性动态渲染组件操作
2020/07/28 Javascript
Vue环境搭建+VSCode+Win10的详细教程
2020/08/19 Javascript
[14:19]2018年度COSER大赛-完美盛典
2018/12/16 DOTA
Python实现获取域名所用服务器的真实IP
2015/10/25 Python
Django框架实现的简单分页功能示例
2018/12/04 Python
padas 生成excel 增加sheet表的实例
2018/12/11 Python
python中的函数递归和迭代原理解析
2019/11/14 Python
解决安装新版PyQt5、PyQT5-tool后打不开并Designer.exe提示no Qt platform plugin的问题
2020/04/24 Python
Django之全局使用request.user.username的实例详解
2020/05/14 Python
HearthSong官网:儿童户外玩具、儿童益智玩具
2017/10/16 全球购物
Servlet的实例是在生命周期什么时候创建的?配置servlet最重要的是什么?
2012/05/30 面试题
工商管理专业实习生自我鉴定
2013/09/29 职场文书
销售简历自我评价
2014/01/24 职场文书
致百米运动员广播稿
2014/01/29 职场文书
消防安全承诺书
2014/05/22 职场文书
端午节活动总结
2014/08/26 职场文书
党的群众路线对照检查材料范文
2014/09/24 职场文书
小学元宵节活动总结
2015/02/06 职场文书
乱世佳人观后感
2015/06/08 职场文书
javaScript Array api梳理
2021/03/31 Javascript
MySQL数据库完全卸载的方法
2022/03/03 MySQL
VUE使用draggable实现组件拖拽
2022/04/06 Vue.js