利用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实现端口转发器的方法
Mar 13 Python
用Python的Django框架来制作一个RSS阅读器
Jul 22 Python
使用Python的PIL模块来进行图片对比
Feb 18 Python
Python数据可视化正态分布简单分析及实现代码
Dec 04 Python
Python判断两个对象相等的原理
Dec 12 Python
python中的内置函数max()和min()及mas()函数的高级用法
Mar 29 Python
pandas表连接 索引上的合并方法
Jun 08 Python
Django自定义用户表+自定义admin后台中的字段实例
Nov 18 Python
pytorch中使用cuda扩展的实现示例
Feb 12 Python
Python线程threading模块用法详解
Feb 26 Python
python3格式化字符串 f-string的高级用法(推荐)
Mar 04 Python
Python实现为PDF去除水印的示例代码
Apr 03 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
优化NFR之一 --MSSQL Hello Buffer Overflow
2006/10/09 PHP
坏狼的PHP学习教程之第1天
2008/06/15 PHP
php disk_free_space 返回目录可用空间
2010/05/10 PHP
php Hex RGB颜色值互换的使用
2013/05/10 PHP
php后门URL的防范
2013/11/12 PHP
php去除html标记的原生函数详解
2015/01/27 PHP
WordPress自定义时间显示格式
2015/03/27 PHP
php采用session实现防止页面重复刷新
2015/12/24 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
2018/02/08 PHP
php递归函数怎么用才有效
2018/02/24 PHP
php使用curl伪造来源ip和refer的方法示例
2018/05/08 PHP
jquery中实现简单的tabs插件功能的代码
2011/03/02 Javascript
javascript中一些util方法汇总
2015/06/10 Javascript
AngularJS 验证码60秒倒计时功能的实现
2017/06/05 Javascript
ReactNative之键盘Keyboard的弹出与消失示例
2017/07/11 Javascript
微信小程序用户自定义模版用法实例分析
2017/11/28 Javascript
vue的token刷新处理的方法
2018/07/17 Javascript
vue 关闭浏览器窗口的时候,清空localStorage的数据示例
2019/11/06 Javascript
详解三种方式在React中解决绑定this的作用域问题并传参
2020/08/18 Javascript
Flexible.js可伸缩布局实现方法详解
2020/11/13 Javascript
[01:14]辉夜杯战队访谈宣传片—NEWBEE.Y
2015/12/26 DOTA
介绍Python的Django框架中的静态资源管理器django-pipeline
2015/04/25 Python
tensorflow实现对图片的读取的示例代码
2018/02/12 Python
Pandas 数据框增、删、改、查、去重、抽样基本操作方法
2018/04/12 Python
Python 读取图片文件为矩阵和保存矩阵为图片的方法
2018/04/27 Python
浅述python中深浅拷贝原理
2018/09/18 Python
对python 合并 累加两个dict的实例详解
2019/01/21 Python
Python后台管理员管理前台会员信息的讲解
2019/01/28 Python
Django用户认证系统 组与权限解析
2019/08/02 Python
PyTorch: 梯度下降及反向传播的实例详解
2019/08/20 Python
opencv-python 提取sift特征并匹配的实例
2019/12/09 Python
html5开发之viewport使用
2013/10/17 HTML / CSS
解除合同协议书
2014/04/17 职场文书
社区挂职锻炼个人工作总结
2015/10/23 职场文书
心理学培训心得体会
2016/01/22 职场文书
银行求职信怎么写
2019/06/20 职场文书