python 读写 json文件
json的优势:
1. 数据体积方面。
JSON相对于XML来讲,数据的体积小,传递的速度更快些。
2. 传输速度方面。
JSON的速度要远远快于XML
3. 数据格式
数据格式比较简单, 易于读写, 格式都是压缩的。
4. 与python的交互使用方便
json 是 k-v结构的形式,
简单来说, 如果是一个key,对应一个value.中间用 : 分隔,最外面用{}包围, 不同键值对之间用逗号,隔开
{‘key1’: 'value1', 'key2': 'value2', 'key3': 'value3'}
如果有一个Key对应着多个value的情况,用[]把对应的所有value包括起来。
{'key1': ['v11', 'v12', 'v13'], 'key2':'v22'}
复杂一点的还有这样的,不过其实原理都一样。
{ "people":[ { "firstName": "Brett", "lastName":"McLaughlin" }, { "firstName":"Jason", "lastName":"Hunter"
}
]
}
json是什么呢?
- 是一种轻量级的数据交换格式。
- 完全独立于编程语言的文本格式来存储和表示数据。
- 简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,易于机器解析和生成,并有效地提升网络传输效率。
json JavaScript Object Notation(JS对象标记)和JavaScript 的关系
JSON格式在语法上与创建JavaScript对象的代码相同。由于这种相似性,JavaScript程序可以轻松地将JSON数据转换为JavaScript对象。JavaScript是一种语言, 而json终其还是一种文本格式,是一堆字符串。
由于json是文本格式, 我们要用python去操纵它,首先需要把这种格式转换为python中的字典。
with open('finance/finance_company.json', encoding='utf-8') as f:
line = f.readline()
print(type(line))
f.close()
输出结果:
<class 'str'>
可以看出来,我们从json格式中读出来为str类型。
我们调用json库的loads方法。
json.load(fp, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
object_hook是一个可选的函数,它将被任何对象字面值解码(dict)的结果调用。将使用object_hook的返回值而不是dict。该特征可以用于实现定制解码器(例如,JSON-RPC类提示)。
object_pairs_hook是一个可选的函数,它将使用任何对象字面值的结果进行调用,并使用对的有序列表进行解码。将使用object_pairs_hook的返回值,而不是dict。该特征可以用于实现依赖于键和值对被解码的顺序的自定义解码器(例如,collections.OrderedDict()将记住插入的顺序)。如果还定义了object_hook,则object_pairs_hook优先。
parse_float(如果指定)将使用要解码的每个JSON浮点的字符串进行调用。默认情况下,这相当于float(num_str)。这可以用于使用另一个数据类型或解析器为JSON浮动(例如。decimal.Decimal)。
parse_int(如果指定)将使用要解码的每个JSON int的字符串进行调用。默认情况下,这相当于int(num_str)。这可以用于使用另一个数据类型或解析器为JSON整数(例如。float)。
parse_constant如果指定,将使用以下字符串之一调用:'-Infinity','Infinity','NaN'。这可以用于引发异常,如果遇到无效的JSON数字。
在版本3.1中更改: parse_constant不会在“null”,“true”和“false”上调用。
要使用自定义JSONDecoder子类,请使用cls kwarg;否则使用JSONDecoder。额外的关键字参数将被传递给类的构造函数。
json.loads(s, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
除了多了一个编码参数, 其余的都与json.load一样。
json.load用来加载文件, 而json.loads用来加载字符串(很明显,因为多了个s(string))
import json with open('finance/finance_company.json', encoding='utf-8') as f:
line = f.readline()
d = json.loads(line)
print(type(d))
f.close()
输出:
<class 'dict'>
读取范例:
new.json
{"name": "异享金融", "company_url": "http://www.yixiangjinrong.com", "telphone": "0371-55056647", "crawl_time": "2017-07-13 16:11:16"}
readjson.py
import json with open('test.json', encoding='utf-8') as f:
line = f.readline()
d = json.loads(line)
name = d['name']
company_url = d['company_url']
telephone = d['telphone']
crawl_time = d['crawl_time']
print(name, company_url, telephone, crawl_time)
f.close()
输出结果:
异享金融 http://www.yixiangjinrong.com 0371-55056647 2017-07-13 16:11:16
这样就成功的读取了json文件啦。
写json文件
json.dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
json模块总是产生str对象,而不是bytes对象。因此,fp.write()必须支持str输入。
如果ensure_ascii为true(默认值),则输出将保证所有传入的非ASCII字符都转义。如果ensure_ascii为false,则这些字符将按原样输出。
如果check_circular为false(默认值:True),则将跳过容器类型的循环引用检查,循环引用将导致OverflowError
如果allow_nan为false(默认值:True),则将是ValueError序列化超出范围float值(nan,inf,-inf),严格遵守JSON规范。如果allow_nan为true,则将使用与其等效的JavaScript代码(NaN,Infinity,-Infinity)。
如果缩进是非负整数或字符串,那么JSON数组元素和对象成员将以该缩进级别打印。缩进级别0,负数或""将只插入换行符。None(默认值)选择最紧凑的表示。使用正整数缩进缩进,每个级别有许多空格。如果缩进是字符串(例如"\t"),则该字符串用于缩进每个级别。
如果sort_keys为真(默认值:False),则字典的输出将按键排序。
使用默认的 ensure_ascii=True时, json文件变成了这样:
{"name": "\u4e24\u53ea\u8001\u864e", "company_url": "http://www.twotiger.com/", "telphone": "010-64789918", "crawl_time": "2017-07-16 22:57:15"}
ensure_ascii=Flase, 中文就成功出现
{"name": "异享金融", "company_url": "http://www.yixiangjinrong.com", "telphone": "0371-55056647", "crawl_time": "2017-07-13 16:11:16"}
因为该方法把我们的中文自动转义了, 变成了ASCII码, 所以导致了中文看着错乱了。加上这句就好了。
如何读取完整的文件
上面主要示例了json的使用。但是在实际开发过程中我们是需要对这个文件进行读取的。下面我们看看如何读取。
我们都应该知道python读取文件有三种方法。
read(), readline(), radlines()
read()直接读取出字符串,并且字符串或者字符对象返回。
readline() 读取文本中的一行
readlines() 读取文本中的所有内容并放入缓存区。
下面是使用的readline读取整个文本示例:
with open(file_path, 'r', encoding='utf-8') as f:
try:
while True:
line = f.readline()
if line:
r = json.loads(line)
# print(r)
else:
break
except:
f.close()
这样就可以读取所有文本并解析成Python可以操作的数据模式了
python 读写 json文件的更多相关文章
- python 读写json文件(dump, load),以及对json格式的数据处理(dumps, loads)
JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. 1.json.dumps()和json.loads()是json ...
- python读写json文件(转)
https://www.cnblogs.com/bigberg/p/6430095.html 利用python中的json库处理数据(包含json的四种方法:dumps.dump.loads.load ...
- Python读写Json文件
一个小例子,使用Json配置文件 # -*- coding: utf-8 -*- import json import time def store(data): with open('data.js ...
- python中json文件处理涉及的四个函数json.dumps()和json.loads()、json.dump()和json.load()的区分
一.概念理解 1.json.dumps()和json.loads()是json格式处理函数(可以这么理解,json是字符串) (1)json.dumps()函数是将一个Python数据类型列表进行js ...
- [转]用Python读写Excel文件
[转]用Python读写Excel文件 转自:http://www.gocalf.com/blog/python-read-write-excel.html#xlrd-xlwt 虽然天天跟数据打交 ...
- python读写Excel文件的函数--使用xlrd/xlwt
python中读取Excel的模块或者说工具有很多,如以下几种: Packages 文档下载 说明 openpyxl Download | Documentation | Bitbucket The ...
- 使用Python读写csv文件的三种方法
Python读写csv文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 前言 逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是 ...
- python读写csv文件
文章链接:https://www.cnblogs.com/cloud-ken/p/8432999.html Python读写csv文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 前言 逗 ...
- 【python-ini】python读写ini文件
[python-ini]python读写ini文件 本文实例讲述了Python读写ini文件的方法.分享给大家供大家参考.具体如下: 比如有一个文件update.ini,里面有这些内容: 1 2 ...
随机推荐
- UVA 1604:Cubic Eight-Puzzle(模拟,BFS Grade C)
题意: 3*3方格,有一个是空的.其他的每个格子里有一个立方体.立方体最初上下白色,前后红色,左右蓝色.移动的方式为滚.给出初态空的位置,终态上面颜色情况,问最少多少步能到达.如果超过30步不能到达, ...
- flask框架基本使用(1)(基本框架搭建与请求参数接收)
#转载请留言联系 Flask 是一个 Python 实现的 Web 开发微框架. 1.搭建Flask开发环境 在你开发项目的时候,你拥有的项目越多,同时使用不同版本的 Python 工作的可能性也就越 ...
- ws2s函数
std::string ws2s(const std::wstring& str) { char* pElementText; int iTextLen; // wide char to mu ...
- Reporting Service报表水印的添加
上一篇文章寫到了自帶報表的製作,現在來談談報表水印的添加 1:水印產生代碼 using System; using System.Data; using System.Configuration; u ...
- 2018 CCPC 女生专场
可能是史上最弱的验题人—— Problem A (小)模拟. #include <bits/stdc++.h> using namespace std; int T; int main() ...
- 网络爬虫框架Webmagic
1 谈谈网络爬虫 1.1 什么是网络爬虫 在大数据时代,信息的采集是一项重要的工作,而互联网中的数据是海量的,如果单纯靠人力进行信息采集,不仅低效繁琐,搜集的成本也会提高.如何自动高效地获取互联网中我 ...
- 前台vue的使用简单小结
前台vue的使用简单小结 本项目要求:安装有node.js 6.0以及以上安装npm使用vue.js官方安装方法初始化项目npm install安装VueResurce:npm install vue ...
- 彻底解决INSTALL_FAILED_UPDATE_INCOMPATIBLE的安装错误、安装包与之前设备上的安装包签名不一致
有时候开发的问题:会遇到在公司上班的时候,公司的IDE能跑程序,把程序拷贝回家,再跑一次,就会出现以下错误: INSTALL_FAILED_UPDATE_INCOMPATIBLE 原因:就是你的安装包 ...
- Enum枚举类使用集合
1.使用扩展方法使用枚举值对于的Description属性值 public static class EnumExtenstion { public static string GetDescript ...
- kubernetes1.5.2集群部署过程--非安全模式
运行环境 宿主机:CentOS7 7.3.1611 关闭selinux etcd 3.1.9 flunnel 0.7.1 docker 1.12.6 kubernetes 1.5.2 安装软件 yum ...