python读写json、格式化写入json文件_python json 格式化输入文件-程序员宅基地

技术标签: python  前端  json  html  开发语言  

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。

JSON在python中分别由list和dict组成。

这是用于序列化的两个模块

  • json: 用于字符串和python数据类型间进行转换
    Json模块提供了四个功能:dumps、dump、loads、load
  • pickle: 用于python特有的类型和python的数据类型间进行转换
    pickle模块提供了四个功能:dumps、dump、loads、load

json.dumps()把数据类型转换成字符串
json.dump()把数据类型转换成字符串并存储在文件中
json.loads()把字符串转换成数据类型
json.load()把文件打开从字符串转换成数据类型

json是可以在不同语言之间交换数据的,而pickle只在python之间使用。
json只能序列化最基本的数据类型,josn只能把常用的数据类型序列化(列表、字典、列表、字符串、数字、),比如日期格式、类对象!josn就不行了。而pickle可以序列化所有的数据类型,包括类,函数都可以序列化。

案例1 dumps

将python中的字典数据编码为 JSON字符串 字符串

1 import json
2 
3 test_dict = {'one':1, 'two':{2.1:['a', 'b']}
4 print(test_dict)
5 print(type(test_dict))
6 #dumps 将数据转换成字符串
7 json_str = json.dumps(test_dict)
8 print(json_str)
9 print(type(json_str))

输出:

{'one':1, 'two':{2.1:['a', 'b']}
<class 'dict'>
{"one":1, "two":{2.1:["a", "b"]}
<class 'str'>

案例2 loads

用于解析JSON数据,返回python中的的字典数据类型

10 new_dict = json.loads(json_str)
11 print(new_dict)
12 print(type(new_dict))

输出:

{'one':1, 'two':{2.1:['a', 'b']}
<class 'dict'>

案例3 dump

:将python dict数据写入json文件中

1 with open("../config/record.json","w") as f:
2     json.dump(new_dict,f)
3     print("加载入文件完成...")

json文件内容:

1 {"one":1, "two":{2.1:["a", "b"]}

案例4 load

把文件打开,并把JSON字符串变换为python dict数据类型

1 with open("../config/record.json",'r') as load_f:
2     load_dict = json.load(load_f)
3     print(load_dict)
4  	  print(type(load_dict))

输出:

{'one':1, 'two':{2.1:['a', 'b']}
<class 'dict'>

案例5 格式化写入json文件

两种方法均可以实现:
1、将python字典数据用dumps()方法编码成JSON字符串,然后再写入json文件中

with open("../config/format_json.json", 'w') as write_f:
	write_f.write(json.dumps(load_dict, indent=4, ensure_ascii=False))

2、直接用dump()方法将python字典数据写入json文件中

with open("../config/format_json.json", 'w') as write_f:
	json.dump(load_dict, write_f, indent=4, ensure_ascii=False)

格式化写入json后,文件内容:

{
	'one': 1,
	'two': {
		2.1: [
			'a',
			'b'
		]
	}				
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_46416934/article/details/123442163

智能推荐

软件模拟IIC从机_模拟i2c从机-程序员宅基地

文章浏览阅读8.5k次,点赞9次,收藏93次。由于ic性能有限,没有硬件的iic外设,项目上有需要使用iic从机,所以自己写了个iic从机模块,执行效率还行可以10m主频的单片机最快可以接收到100K的速度。该模块需要资源,2个外部中断配置-上升下降沿中断,来模拟iic时序,芯片编译器的问题,对结构体不是很友好,所以这边没有使用结构体对变量打包,目前只实现了简单的接受和发送,不支持eeprom那种读写方式。两组io口配置,总共有4种状态:1 SDA下降沿中断SCL高电平 – 起始信号SCL低电平 – 数据0 或 ACK2 SDA上升沿中断_模拟i2c从机

Swish & hard-Swish_swish和hardswish-程序员宅基地

文章浏览阅读1.5w次,点赞2次,收藏18次。当β = 0时,Swish变为线性函数f(x)=x/2β → ∞, σ(x)=(1+exp(−x))−1σ(x)=(1+exp⁡(−x))−1为0或1. Swish变为ReLU: f(x)=2max(0,x)所以Swish函数可以看做是介于线性函数与ReLU函数之间的平滑函数. beta是个常数或者可以训练的参数。其具有无上界有下界、平滑、非单调的特性。其在模型效果上优于ReLU。ha..._swish和hardswish

交叉编译 Qt5.12.2_qt5.12 arm 交叉编译-程序员宅基地

文章浏览阅读1.4w次,点赞12次,收藏59次。来自QQ群 Linux && 技术分享 311078264打开链接加入QQ群:https://jq.qq.com/?_wv=1027&k=5Gr3bAx此文档由elikang整理,为了文章简单直接,许多细节未能在文章中体现,如有疑问请进群讨论。参考文章:https://doc.qt.io/qt-5/linux.html交叉编译工作在Ubuntu18.04上进行,..._qt5.12 arm 交叉编译

/deep/ 深度作用选择器作用及使用_/deep/ span-程序员宅基地

文章浏览阅读1.8k次,点赞3次,收藏6次。之前在开发中遇到一个问题,vue项目结合 element ui 使用。但是 element ui 的样式不一定符合我们的需求,这时我们就需要改变它的样式。比如博主使用到了element ui 的对话框,我想要改变这个对话框标题的颜色,所以我需要在页面中审查元素找到对应的标签。但是当我找到并且复制,然后试图去改变它的样式时,怎么都没办法改变。我以为是权重的问题,所以我加 ! important,但是也毫无作用。当我审查元素发现此样式就没有作用到,就相当于它没有找到这个元素,所以也就不存在改_/deep/ span

MybatisPlusExcepection: can not find lambda cache for this property [XX] for entity [xxx]_lambdaquery() 无法缓存实体类-程序员宅基地

文章浏览阅读1.1w次,点赞2次,收藏3次。项目有用到mybatis-plus还是挺香的,但是遇到一个坑com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: can not find lambda cache for this property [dbName] of entity []意思是实体类enetity及其字段没有缓存或者说指定字段没有缓存这个需要具体问题具体分析,得先找到在哪缓存的?什么时候缓存的?问题和解决方案我这里的问题是因为继承太多正常是一个mapp_lambdaquery() 无法缓存实体类

FP-growth_fp-growth工作流程-程序员宅基地

文章浏览阅读1.7k次,点赞4次,收藏6次。FP-growthFP-growth 算法能够更有效地挖掘数据,但不能用于发现关联规则。FP-growth 基于 Apriori 算法构建,但在完成相同任务时采用了一些不同的技术。Apriori:在每次循环的连接步中都要扫描数据集,来计算当前组合而成的项集的支持度。FP-growth:只需要对数据库进行两次扫描,并将数据集存储在一个特定的称作 FP 树的数据结构。这种做法能够使得算法的执..._fp-growth工作流程

随便推点

CSS选择器小结(python使用css方式定位)_python可以用css来调节位置吗-程序员宅基地

文章浏览阅读1.3w次,点赞4次,收藏29次。学习Python写爬虫的时候,遇到css定位问题,故小结一下css选择器定位的方式通配符选择器:* {color:red;}CSS 类选择器匹配所有class = ‘important’*.important {color:red;}去掉前面通配符也是一样的。结合元素选择器匹配所有p标签下class = ‘important’p.important {color:red;}CSS 多类选择器匹配c..._python可以用css来调节位置吗

C#多维数组的维数长度求解_多维数组长度 c#-程序员宅基地

文章浏览阅读2.4k次。C#多维数组的维数长度求解string[,] datalst = new string[,] { { “11”, “12”, “13” }, { “21”, “22”, “23” } };int row = datalst.GetLength(1); //第一维的长度(即行数)int col = datalst.GetLength(0); //第二维的长度(即列数)Console.Wri..._多维数组长度 c#

C# System.Threading.Timer如何停止_system.timers.timer如何停止-程序员宅基地

文章浏览阅读6.7k次。Threading.Timer 属于100% 多线程Timers.Timer 默认多线程,可设置为单线程既然是多线程,不管通过回调 还是事件 执行任务,都是开启的另一个线程;你可以暂停或销毁计时器(Timer)本身,但是不能操作里面新开线程的任务,这也是多线程设计的期望方式,因为你不知道 超线程里面到底执行到哪儿了。但是,像我这种(刁民)有时候就喜欢那么横,所以就把 新开的任务装在一个 n..._system.timers.timer如何停止

爬取汽车之家所有汽车参数配置_汽车之家参数配置怎么导出-程序员宅基地

文章浏览阅读5.1k次,点赞3次,收藏18次。效果预览汽车之家参数配置的页面无法右键查看网页源代码,不太好爬取,网上相关教程方法比较复杂,这里采用了两步走的爬取方法。即先获取所有车型的网页,再分别解析,逐步拆解。代码实现第一步,导入相关库import bs4import requests as reqimport reimport jsonimport csv第二步,下载出所有车型的网页def mainMethod(): li = [chr(i) for i in range(ord("A"), ord("Z") _汽车之家参数配置怎么导出

​【原创】基于SSM的学院排课管理系统(排课管理系统毕业设计源代码)_培训机构 排课系统 源码-程序员宅基地

文章浏览阅读2.2k次,点赞2次,收藏20次。后端采用SSM框架。前端使用的是Layui的一个网站模板。通过3种角色使用,实现了包括了教师、学生、班级、专业、课程、排课、数据统计等多个不同的模块。本系统的排课逻辑是为不同学院下不同班级的每一天课程进行安排,并不是传统的固定课程形式。每一天的课程可以是不同的。_培训机构 排课系统 源码

vue-amap中使用官方轨迹回放功能_vue-amap passedpolyline-程序员宅基地

文章浏览阅读1.4k次,点赞4次,收藏7次。// vue-amap中使用官方轨迹回放功能<template> <div class="page"> <div>MAP TRACK</div> <div class="map-container"> <el-amap :center="center" :amap-manager="amapManager" _vue-amap passedpolyline

推荐文章

热门文章

相关标签