经常在Python中对JSON格式的文件进行操作,今天对这些操作做一个总结
首先,需要导入json库import json
Python | JSON |
---|---|
dict | object |
list, tuple | array |
str, unicode | string |
int, long, float | number |
True | true |
False | false |
None | null |
相较于JSON对象,JSON字符串(可以理解为一个普通的字符串但拥有特殊的格式 这种格式可以用来转换回JSON对象)可以更加方便的在函数之间传递。
JSON对象中只能使用双引号""
而python对象字典中可以使用单引号''
json.loads
将JSON字符串转化为 Python 字段的数据类型。
loads:针对内存对象,将string转换为dict (将string转换为dict)
def loads(s, encoding=None, cls=None, object_hook=None, parse_float=None,
parse_int=None, parse_constant=None, object_pairs_hook=None, **kw):
"""Deserialize ``s`` (a ``str`` instance containing a JSON
document) to a Python object."""
json.loads 用于解码 JSON 数据。该函数返回 Python 字段的数据类型。
jsonData='{"\u6d4b\u8bd5": 12345, "\u5185\u5bb9": ["\u6211\u4e5f\u4e0d\u77e5\u9053\u6211\u8981\u5199\u4ec0\u4e48", "123"]}'
print(jsonData)
print(type(jsonData)) # <class 'str'> 理解为json字符串
py_type_info=json.loads(jsonData)
print(py_type_info)
print(type(py_type_info)) # <class 'dict'>
# 输出:
#{"测试": 12345, "内容": ["我也不知道我要写什么", "123"]}
# <class 'str'>
# {'测试': 12345, '内容': ['我也不知道我要写什么', '123']}
# <class 'dict'>
可以从上面输出中看到 JSON 的双引号 与python dict的单引号
json.load
json.load用于读取.json格式的文件,将JSON文件 转化成Python字段的数据类型
load:针对文件句柄,将json格式的字符转换为dict,从文件中读取 (将string转换为dict)
def load(fp, cls=None, object_hook=None, parse_float=None,
parse_int=None, parse_constant=None, object_pairs_hook=None, **kw):
"""Deserialize ``fp`` (a ``.read()``-supporting file-like object containing
a JSON document) to a Python object."""
with open('abc.json','r',encoding='utf-8')as f:
py_type_info = json.load(f)
print(py_type_info)
with open(os.path.join("/home/output/compare", "cmp{}.json".format(i)), "r", encoding='utf-8') as f:
cmpInfo=json.load(f)
参考资料:Pythonh中用json.load() json.loads()加载json数据的方法
提醒:根据JSON规范(http://www.json.org, RFC 4627, RFC 7159),不支持注释。
但如果真的不幸遇到json文件中有 // 类似的注释如何解决?
def load_json(path):
import json
lines = [] # 第一步:定义一个列表, 打开文件
with open(path) as f:
for row in f.readlines(): # 第二步:读取文件内容
if row.strip().startswith("//"): # 第三步:对每一行进行过滤
continue
lines.append(row) # 第四步:将过滤后的行添加到列表中.
return json.loads("\n".join(lines)) #将列表中的每个字符串用某一个符号拼接为一整个字符串,用json.loads()函数加载,这样就大功告成啦!!
json.dumps
json.dumps 用于将 Python 对象 编码成 JSON 字符串。
注意:这个函数产生的是字符串
json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, encoding="utf-8", default=None, sort_keys=False, **kw)
j1={
'测试':12345,'内容':['我也不知道我要写什么','123']}
j1_str=json.dumps(j1)
print(j1)
# 输出:{'测试': 12345, '内容': ['我也不知道我要写什么', '123']}
json.dump
将Python对象编码成JSON文件
j1={
'测试':12345,'内容':['我也不知道我要写什么','123']}
with open('abc.json','w') as f:
json.dump(j1,f)
abc.json中写入了Python对象j1编码出的json格式信息:
{
"\u6d4b\u8bd5": 12345, "\u5185\u5bb9": ["\u6211\u4e5f\u4e0d\u77e5\u9053\u6211\u8981\u5199\u4ec0\u4e48", "123"]}
文章浏览阅读1.2k次,点赞16次,收藏18次。接下来,我们将 softmax-normalization 应用于一个获得一个~.对于我-th 区域,我们将其最大对齐分数计算为麦克斯�一个~我�.然后,我们使用所有区域的平均最大对齐分数作为细粒度图像与文本的相似度�1.同样,我们可以获得细粒度的文本与图像的相似度�2,并且可以定义总的细粒度相似度分数:�=(�1+�2)/2.直观地讲,假设一组补丁标记对应图像中的视觉实例,那么它们往往具有很强的交互性,形成对应实例的完整语义,这有助于更好地判断与配对文本的相似度。,我们设计了一个轻量级的区域生成模块。_语义对齐 细粒度
文章浏览阅读4w次。red_green下载得到一张图片解法一:pytho脚本#生成脚本from PIL import Imageimport osimport bitstring#image_name = 'flag.jpg'image_name = input("请输入当前文件夹下图片的名称>>>\n")current_path = os.path.dirname(__file__)with open(os.path.join(current_path,image_name),'rb'_攻防世界 red_green
文章浏览阅读76次。安装官方的Python带Idle但是却无法打开,百度谷歌了几种解决方法,加上自己的实际境况予以解决。我的python是直接安装在C盘下的。1.首先是设置环境变量:Path=C:\Python27PYTHONPATH= C:\Python27\Lib;C:\Python27\Lib\tkinterTCL_LIBRARY=C:\Python27\tcl\tcl8.5TK_LIBRARY=C..._python 改变环境变量之后 py文件不能使用idle打开
文章浏览阅读1.4k次。本篇推文共计2000个字,阅读时间约3分钟。华为云—华为公司倾力打造的云战略品牌,2011年成立,致力于为全球客户提供领先的公有云服务,包含弹性云服务器、云数据库、云安全等云计算服务,软件开发服务,面向企业的大数据和人工智能服务,以及场景化的解决方案。华为云用在线的方式将华为30多年在ICT基础设施领域的技术积累和产品解决方案开放给客户,致力于提供稳定可靠、安全可信、可持续创新的云服务,做智能世界的“黑土地”,推进实现“用得起、用得好、用得放心”的普惠AI。华为云作为底座,为华为全栈全场景A.._华为云人工智能 垃圾分类
文章浏览阅读6.4k次,点赞4次,收藏86次。我们都知道 Python 可以用来开发桌面应用,一旦功能开发完成,最后打包的可执行文件体积大,并且使用 Python 开发桌面应用周期相对较长假如想快速开发一款 PC 端的桌面应用,推荐使用 Aardio + Python 搭配的方式进行开发1. Aardio介绍Aardio 是一款专注于 Windows 桌面端的软件开发,适用于快速开发一些自用的 PC端桌面工具,并且它支持与Python、JS、Golang 等主流语言进行混合编程它是一款免费的开发工具,简单易学,支持多线程,具有轻巧..._python制作桌面端
文章浏览阅读10w+次,点赞71次,收藏72次。如果在运行 Spring 项目时出现了类似于:class path resource [applicationContext.xml] cannot be opened because it does not exist这样的异常 意思就是没有找到你的 .xml 配置文件原因我可以肯定你一定用的是 ApplicationContext ctx = new ClassPathXmlApplicati_class path resource [feign/requestinterceptor.class] cannot be opened becaus
文章浏览阅读1.4w次,点赞6次,收藏12次。关于字符串大小写转换,是写 linux 脚本经常干的事儿,所以总想找个方便的方法让我少打点字儿,搜索国内的中文资源,网上也能找到很多关于这个帖子,介绍的方法都差不多,用typeset是最简单的方法了,但我觉得还是不够简单,因为需要多定义一个变量。google上找到这个stackoverflow上的帖子,才知道Bash 4.0以上版本有更好的办法:《How to convert a strin..._shell 小写变大写
文章浏览阅读2.5k次,点赞6次,收藏48次。C++线性表的顺序存储结构 线性表是最基本、最简单、也是最常用的一种数据结构。线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列。线性表的特点除第一个元素外,其他每一个元素有且仅有一个直接前驱。除最后一个元素外,其他每一个元素有且仅有一个直接后继。直接前驱和直接后继描..._c++使用顺序存储表示方法创建线性表
文章浏览阅读1.4w次,点赞2次,收藏7次。服务器将protobuf版本从2.6.1降级到2.5.0后,重新装回2.6.1,出现报错:protoc: symbol lookup error: /usr/lib/x86_64-linux-gnu/libprotoc.so.9: undefined symbol: _ZNK6google8protobuf7Message11GetTypeNameB5cxx11Ev搜索网上解决办法,发现并...__znk6google8protobuf7message11gettypenameb5cxx11ev
文章浏览阅读356次。synchronized和volatile两个关键字也是校招常考点之一。volatile可以禁止进行指令重排。synchronized可作用于一段代码或方法,既可以保证可见性,又能够保证原子性。_synchronized和volatile
文章浏览阅读461次。作者:禅与计算机程序设计艺术 1.简介在新冠病毒疫情期间,由于经济全面恢复、国内外大量人员返乡、工作日程调整等因素的影响,使得整个社会成为新冠病毒大流行的重灾区。为了减轻生产企业和消费者的不满情绪,提高社会福利水平,防止再次发生类似事件,各地都制定了诸多限制、规范、政策等方面的法律法规,但这些法律法规
文章浏览阅读152次。EIP 161: State trie clearing- makes it possible to remove a large number of empty accounts that were put in the state at very low cost as a result of earlier DoS attacks. With this EIP, 'empty' accou..._eip161