json转csv 原数据 完整代码 代码解读 后续 第一次遇到原本的json格式数据,但是ArcGIS软件不认json,于是需要 转 成csv格式。本篇将讲解如何读取本地
json转csv
- 原数据
- 完整代码
- 代码解读
- 后续
第一次遇到原本的json格式数据,但是ArcGIS软件不认json,于是需要转成csv格式。本篇将讲解如何读取本地json格式数据,并转为csv格式的。
原数据
先来看一看原来数据长什么模样
json格式在我电脑里面长的像一个乐谱一样,用Notepad++软件打开就是那种一层一层嵌套的格式,和python里面的字典格式非常像,从第一个中括号“{”开始,后面的都是一对一对的这种键值对的形式出现,一个城市名,一个经纬度,如
'海门市': [121.15, 31.89]并用逗号隔开。
完整代码
在弄清楚数据长什么样的之后,接下来就是写代码的事情了
# -*- coding: utf-8 -*-"""
Created on Fri Feb 7 09:57:54 2020
project name:json转csv
@author: 帅帅de三叔
"""
import csv #导入csv模块
filename = '中国333个地级及以上城市经纬度坐标.json'
file= open(filename, 'r', encoding='UTF-8') #打开json格式文件
with open("中国地级以上城市经纬度.csv", "w+",newline='') as csv_file: #新建csv格式文件
writer=csv.writer(csv_file) #对象化
header=["城市", "经度", "纬度"] #构造表头
writer.writerow(header) #写入表头
for line in file: #按行读取原json格式数据
if ":" in line: #如果有冒号的行
row=line.split(":") #分裂
city=row[0].replace("'","").strip() #提取城市名
lng=row[1].split(",")[0].replace("[","") #提取经度
lat=row[1].split(",")[1].replace("]","") #提取纬度
print(city,lng,lat)
data_row=[city,lng,lat] #组成一条数据
writer.writerow(data_row) #写入csv
csv_file.close() #关闭csv文件
代码解读
由于第一次读取本地json格式数据,此处写清楚一些,首先用open函数把中国333个地级及以上城市经纬度坐标.json以读取的方式并加以utf8编码方式的文件打开
file= open(filename, 'r', encoding='UTF-8') #打开json格式文件打开之后就对行进行循环,由于第一行是个文件名称,故只处理带冒号的行
for line in file: #按行读取原json格式数据if ":" in line: #如果有冒号的行
对每一行进行城市名称,经度,纬度三个字段的提取工作,这里主要用来split函数来分裂,和replace函数来去掉其他字符,最后把三者组合成一条数据写入到csv里面去,保存即可,文件夹下面多出一个csv文件
后续
为了方面以后查阅,此处增加json模块下的两个重量级函数
函数
描述
json.dumps
将 Python 对象编码成 JSON 字符串
json.lodads
将已编码的 JSON 字符串解码为 Python 对象
这个在爬虫的时候可能会用到,今日暂且记录一下,等以后碰到再详细讲解。