利用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函数学习笔记
Oct 07 Python
Python编程入门之Hello World的三种实现方式
Nov 13 Python
python实现爬虫统计学校BBS男女比例之数据处理(三)
Dec 31 Python
Python数据类型详解(一)字符串
May 08 Python
简单谈谈python中的多进程
Nov 06 Python
Python中eval带来的潜在风险代码分析
Dec 11 Python
python批量识别图片指定区域文字内容
Apr 30 Python
python 字符串常用函数详解
Sep 11 Python
Python大数据之使用lxml库解析html网页文件示例
Nov 16 Python
Python 使用 prettytable 库打印表格美化输出功能
Dec 26 Python
Python多线程threading join和守护线程setDeamon原理详解
Mar 18 Python
使用pd.merge表连接出现多余行的问题解决
Jun 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
全国FM电台频率大全 - 28 甘肃省
2020/03/11 无线电
phpmyadmin 3.4 空密码登录的实现方法
2010/05/29 PHP
PHP Cookie的使用教程详解
2013/06/03 PHP
php中文繁体和简体相互转换的方法
2015/03/21 PHP
深入浅析用PHP实现MVC
2016/03/02 PHP
laravel实现登录时监听事件,添加登录用户的记录方法
2019/09/30 PHP
HTML代码中标签的全部属性 中文注释说明
2009/03/26 Javascript
为jQuery.Treeview添加右键菜单的实现代码
2010/10/22 Javascript
jquery自定义类似$.ajax()的方法实现代码
2013/08/13 Javascript
javascript验证上传文件的类型限制必须为某些格式
2013/11/14 Javascript
javascript获取xml节点的最大值(实现代码)
2013/12/11 Javascript
jQuery的animate函数实现图文切换动画效果
2015/05/03 Javascript
jQuery点击改变class并toggle及toggleClass()方法定义用法
2015/12/11 Javascript
漫谈JS引擎的运行机制 你应该知道什么
2016/06/15 Javascript
EasyUI在表单提交之前进行验证的实例代码
2016/06/24 Javascript
深入理解Angular2 模板语法
2016/08/07 Javascript
微信小程序开发一键登录 获取session_key和openid实例
2016/11/23 Javascript
在一个页面重复使用一个js函数的方法详解
2016/12/26 Javascript
JavaScript 上传文件(psd,压缩包等),图片,视频的实现方法
2017/06/19 Javascript
Mongoose实现虚拟字段查询的方法详解
2017/08/15 Javascript
JS大坑之19位数的Number型精度丢失问题详解
2019/04/22 Javascript
vue实现后台管理权限系统及顶栏三级菜单显示功能
2019/06/19 Javascript
js字符串类型String常用操作实例总结
2019/07/05 Javascript
python运行时间的几种方法
2016/06/17 Python
Python读写及备份oracle数据库操作示例
2018/05/17 Python
Python 数值区间处理_对interval 库的快速入门详解
2018/11/16 Python
Python使用pymysql模块操作mysql增删改查实例分析
2019/12/19 Python
python PIL/cv2/base64相互转换实例
2020/01/09 Python
Python基于Dlib的人脸识别系统的实现
2020/02/26 Python
使用Canvas操作像素的方法
2018/06/14 HTML / CSS
详解HTML5中的元素与元素
2015/08/17 HTML / CSS
若干个Java基础面试题
2015/05/19 面试题
国际贸易实务实训报告
2014/11/05 职场文书
爱的教育观后感
2015/06/17 职场文书
python绘图subplots函数使用模板的示例代码
2021/04/30 Python
PostgreSQL数据库创建并使用视图以及子查询
2022/04/11 PostgreSQL