利用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的加密模块md5、sha、crypt使用实例
Sep 28 Python
Python中用于检查英文字母大写的isupper()方法
May 19 Python
利用Tkinter(python3.6)实现一个简单计算器
Dec 21 Python
Python 查看文件的读写权限方法
Jan 23 Python
django文档学习之applications使用详解
Jan 29 Python
Python实现找出数组中第2大数字的方法示例
Mar 26 Python
python控制windows剪贴板,向剪贴板中写入图片的实例
May 31 Python
利用python画出折线图
Jul 26 Python
Python多图片合并PDF的方法
Jan 03 Python
对Python3 pyc 文件的使用详解
Feb 16 Python
pyenv虚拟环境管理python多版本和软件库的方法
Dec 26 Python
django 解决自定义序列化返回处理数据为null的问题
May 20 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
?生?D片??C字串
2006/12/06 PHP
Yii实现单用户博客系统文章详情页插入评论表单的方法
2015/12/28 PHP
PHP分页显示的方法分析【附PHP通用分页类】
2018/05/10 PHP
基于Laravel 多个中间件的执行顺序详解
2019/10/21 PHP
指定js可访问其它域名的cookie的方法
2007/09/18 Javascript
cookie丢失问题(认证失效) Authentication (用户验证信息)也会丢失
2009/06/04 Javascript
JavaScript几种形式的树结构菜单
2010/05/10 Javascript
js constructor的实际作用分析
2011/11/15 Javascript
JavaScript实现跨浏览器的添加及删除事件绑定函数实例
2015/08/04 Javascript
JS控制按钮10秒钟后可用的方法
2015/12/22 Javascript
JavaScript知识点总结(十)之this关键字
2016/05/31 Javascript
js实现textarea限制输入字数
2017/02/13 Javascript
Vue获取DOM元素样式和样式更改示例
2017/03/07 Javascript
vue.js框架实现表单排序和分页效果
2017/08/09 Javascript
利用VS Code开发你的第一个AngularJS 2应用程序
2017/12/15 Javascript
微信小程序使用swiper组件实现层叠轮播图
2018/11/04 Javascript
Vue如何基于es6导入外部js文件
2020/05/15 Javascript
[01:43]3.19DOTA2发布会 三代刀塔人第三代
2014/03/25 DOTA
[01:33:07]VGJ.T vs Newbee Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
python脚本实现分析dns日志并对受访域名排行
2014/09/18 Python
Centos部署django服务nginx+uwsgi的方法
2019/01/02 Python
python3 pygame实现接小球游戏
2019/05/14 Python
Python 实现数据结构-堆栈和队列的操作方法
2019/07/17 Python
Python 通过微信控制实现app定位发送到个人服务器再转发微信服务器接收位置信息
2019/08/05 Python
HTML5公共页面提取作为公用代码的方法
2020/06/30 HTML / CSS
澳大利亚免息网上购物:Shop Zero
2016/09/17 全球购物
与世界上最好的跑步专业品牌合作:Fleet Feet
2019/03/22 全球购物
豪华床上用品 :Jennifer Adams
2019/09/15 全球购物
销售副总经理岗位职责
2013/12/11 职场文书
九一八事变演讲稿范文
2014/09/14 职场文书
个人三严三实对照检查材料
2014/09/25 职场文书
就业意向协议书
2015/01/29 职场文书
导游词之青城山景区
2019/09/27 职场文书
Nginx工作原理和优化总结。
2021/04/02 Servers
python爬取豆瓣电影TOP250数据
2021/05/23 Python
Python中使用Opencv开发停车位计数器功能
2022/04/04 Python