利用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 的 with 语句详解
Jun 13 Python
wxPython中listbox用法实例详解
Jun 01 Python
windows下python和pip安装教程
May 25 Python
Python使用wget实现下载网络文件功能示例
May 31 Python
实例讲解Python中浮点型的基本内容
Feb 11 Python
详解Python3 对象组合zip()和回退方式*zip
May 15 Python
Pytorch .pth权重文件的使用解析
Feb 14 Python
python中对二维列表中一维列表的调用方法
Jun 07 Python
为什么称python为胶水语言
Jun 16 Python
详解python UDP 编程
Aug 24 Python
python 实现关联规则算法Apriori的示例
Sep 30 Python
python list等分并从等分的子集中随机选取一个数
Nov 16 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
FirePHP 推荐一款PHP调试工具
2011/04/23 PHP
php tp验证表单与自动填充函数代码
2012/02/22 PHP
百度站点地图(百度sitemap)生成方法分享
2014/01/09 PHP
ThinkPHP中关联查询实例
2014/12/02 PHP
php生成zip文件类实例
2015/04/07 PHP
php实现的pdo公共类定义与用法示例
2017/07/19 PHP
JavaScript事件列表解说
2006/12/22 Javascript
JavaScript获取GridView选择的行内容
2009/04/14 Javascript
解决jquery .ajax 在IE下卡死问题的解决方法
2009/10/26 Javascript
JS仿Windows开机启动Loading进度条的方法
2015/02/26 Javascript
jQuery使用hide方法隐藏指定元素class样式用法实例
2015/03/30 Javascript
详解javascript遍历方式
2015/11/11 Javascript
基于jQuery实现Ajax验证用户名是否存在实例
2016/03/30 Javascript
jQuery EasyUI基础教程之EasyUI常用组件(推荐)
2016/07/15 Javascript
jQuery实现浏览器之间跳转并传递参数功能【支持中文字符】
2018/03/28 jQuery
vue2 设置router-view默认路径的实例
2018/09/20 Javascript
vue 百度地图(vue-baidu-map)绘制方向箭头折线实例代码详解
2020/04/28 Javascript
vue点击Dashboard不同内容 跳转到同一表格的实例
2020/11/13 Javascript
利用Fn.py库在Python中进行函数式编程
2015/04/22 Python
用python与文件进行交互的方法
2018/03/01 Python
Python3中的列表生成式、生成器与迭代器实例详解
2018/06/11 Python
Python 合并多个TXT文件并统计词频的实现
2019/08/23 Python
django中上传图片分页三级联动效果的实现代码
2019/08/30 Python
Django DRF APIView源码运行流程详解
2020/08/17 Python
Django模型验证器介绍与源码分析
2020/09/08 Python
利用css3径向渐变做一张优惠券的示例
2018/03/22 HTML / CSS
Html5饼图绘制实现统计图的方法
2020/08/05 HTML / CSS
飞利浦西班牙官方网站:Philips西班牙
2020/02/17 全球购物
【魔兽争霸3重制版】原版画面与淬火MOD画面对比
2021/03/26 魔兽争霸
后勤园长自我鉴定
2013/10/17 职场文书
售后专员岗位职责
2013/12/08 职场文书
团队拓展活动方案
2014/08/28 职场文书
售后服务承诺函格式
2015/01/21 职场文书
2019升学宴主持词范本5篇
2019/10/09 职场文书
Python中非常使用的6种基本变量的操作与技巧
2022/03/22 Python
SQL Server使用导出向导功能
2022/04/08 SQL Server