利用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 解析html之BeautifulSoup
Jul 07 Python
探究Python的Tornado框架对子域名和泛域名的支持
May 02 Python
Python实现的根据文件名查找数据文件功能示例
May 02 Python
Python设计模式之观察者模式原理与用法详解
Jan 16 Python
详解python列表生成式和列表生成式器区别
Mar 27 Python
python处理“
Jun 10 Python
pandas 时间格式转换的实现
Jul 06 Python
浅谈PyQt5中异步刷新UI和Python多线程总结
Dec 13 Python
Python Websocket服务端通信的使用示例
Feb 25 Python
Python实现井字棋小游戏
Mar 09 Python
在pycharm中debug 实时查看数据操作(交互式)
Jun 09 Python
python使用建议与技巧分享(二)
Aug 17 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
苏联队长,苏联超人蝙蝠侠,这些登场的“山寨”英雄真的很严肃
2020/04/09 欧美动漫
php+ajax实现无刷新动态加载数据技术
2015/04/28 PHP
Laravel模型事件的实现原理详解
2018/03/14 PHP
javascript中的parseInt和parseFloat区别
2013/07/12 Javascript
JavaScript避免内存泄露及内存管理技巧
2014/09/05 Javascript
简介JavaScript中valueOf()方法的使用
2015/06/05 Javascript
JS实现的N多简单无缝滚动代码(包含图文效果)
2015/11/06 Javascript
js实现模拟银行卡账号输入显示效果
2015/11/18 Javascript
jQuery旋转木马式幻灯片轮播特效
2015/12/04 Javascript
js实现登录框鼠标拖拽效果
2017/03/09 Javascript
Vue组件化通讯的实例代码
2017/06/23 Javascript
ionic3 懒加载
2017/08/16 Javascript
Vue多环境代理配置方法思路详解
2019/06/21 Javascript
Node.JS获取GET,POST数据之queryString模块使用方法详解
2020/02/06 Javascript
Python实现将16进制字符串转化为ascii字符的方法分析
2017/07/21 Python
Python获取当前函数名称方法实例分享
2018/01/18 Python
Python之reload流程实例代码解析
2018/01/29 Python
python将txt文件读入为np.array的方法
2018/10/30 Python
python 将大文件切分为多个小文件的实例
2019/01/14 Python
Tensorflow轻松实现XOR运算的方式
2020/02/03 Python
python实现canny边缘检测
2020/09/14 Python
一款纯css3实现的动画加载导航
2014/10/08 HTML / CSS
AT&T Wireless:手机、无限数据计划和配件
2018/06/03 全球购物
企业面试题试卷附带答案
2015/12/20 面试题
《大海那边》教学反思
2014/04/09 职场文书
活动总结怎么写
2014/04/28 职场文书
优秀少先队员主要事迹材料
2014/05/28 职场文书
公司董事长助理工作职责
2014/07/12 职场文书
统计学教授推荐信
2014/09/18 职场文书
2014副局长群众路线对照检查材料思想汇报
2014/09/22 职场文书
党的群众路线教育实践活动批评与自我批评发言稿
2014/10/16 职场文书
员工2014年度工作总结
2014/12/09 职场文书
学校元旦晚会开场白
2014/12/14 职场文书
财务总监岗位职责范本
2015/04/03 职场文书
婚宴致辞
2015/07/28 职场文书
解决Jupyter-notebook不弹出默认浏览器的问题
2021/03/30 Python