python 存储json数据的操作
作者:秋殇阁 发布时间:2022-10-02 13:14:14
本篇我们将学习简单的json数据的存储
首先我们需要引入json模块:
import json
这里我们模拟一个常见常见,我们让用户输入用户名、密码,在密码输入完成后提示用户再次输入密码来确认自己的输入,如果两次密码一致,那么我们将用户名和密码以json格式写入文件,否则提示用户再次输入密码。
name = input("please enter your name:")
password = input("please enter your password:")
confirm_password = input("confirm your password:")
while password != confirm_password:
print("input password inconsistencies,please try again")
password = input("please enter your password:")
confirm_password = input("confirm your password:")
我们运行下代码确保我们的准备工作没有问题:
ok,我们可以通过用户输入拿到用户名和密码,接下来,我们就需要将两者以json格式存入文件了。
首先,我们将我们的输入转化为json对象:
user_info = json.dumps({'username': name, 'password': password}, sort_keys=True, indent=4, ensure_ascii=False)
print(user_info)
这里我们使用了json.dumps函数,该函数 用于将 Python 对象编码成 JSON 字符串。
语法:
def dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw) Inferred type: (obj: Any, Any, skipkeys: bool, ensure_ascii: bool, check_circular: bool, allow_nan: bool, cls: Any, indent: Any, separators: Any, default: Any, sort_keys: bool, kw: Dict[str, Any]) -> str
其中sort_keys是用来指定在json格式的对象里面是否按照key的名称来进行排序,indent参数则指定缩进的空格数目。
最后的输入格式如下:
{
"password": "us",
"username": "us"
}
那么接下来我们就将这个json对象写入到文件中去:
with open('user_info.json', 'w', encoding='utf-8') as json_file:
json.dump(user_info, json_file, ensure_ascii=False)
print("write json file success!")
这里我们需要学习一个函数json.dump:
def 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) Inferred type: (obj: Any, fp: {write}, Any, skipkeys: bool, ensure_ascii: bool, check_circular: bool, allow_nan: bool, cls: Any, indent: Any, separators: Any, default: Any, sort_keys: bool, kw: Dict[str, Any]) -> None
这个函数有两个参数是我们必须要填写的:obj(我们要存储的数据), fp(文件句柄,也就是我们要存在那个文件里面)。
ensure_ascii=False这个参数是处理我们希望在json对象里面可以包含中文的场景
If ensure_ascii is false, then the strings written to fp can contain non-ASCII characters if they appear in strings contained in obj. Otherwise, all such characters are escaped in JSON strings.
如果不指定ensure_ascii=False,那么当我们的数据里面包含中文的时候:
{"username": "zhang\u4e09", "password": "ddd"}
会有如上的显示内容。
我们运行程序,依次输入用户名和密码:
please enter your name:us
please enter your password:us
confirm your password:us
{"username": "us", "password": "us"}
write json file success!
Process finished with exit code 0
然后我们看下文本文件中的内容:
接下来我们就需要学习一下怎么读取json格式的内容了。
with open('user_info.json', 'r', encoding='utf-8') as json_file:
data = json.load(json_file)
print(data)
读取json数据需要使用json.load函数:
def load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw) Inferred type: (fp: {read}, Any, cls: Any, object_hook: Any, parse_float: Any, parse_int: Any, parse_constant: Any, object_pairs_hook: Any, kw: Dict[str, Any]) -> Any
这里我们需要提供一个参数fp,也就是我们要操作的文件句柄。
程序运行输出:
{"username": "us", "password": "us"}
我们可以打印一下json.load返回的是什么类型的:
print(type(data))
输出:
<class 'str'>
可见,这是一个字符串,这是为什么呢?难道不应该返回的是python对应的对象吗?
在上面的代码中我们在写入文件前面调用过:
user_info = json.dumps({'username': name, 'password': password}, ensure_ascii=False)
这一行代码,大家还记得吧,它返回的是一个json字符串,所以上面的例子中我们需要使用json.loads重新反序列化为python对象,这一点大家留意一下,上面的例子我们是为了给大家演示json.loads的相关用法,使用如下:
data = json.loads(data)
print(type(data))
print(data['username'])
如果没有这行代码,那么 data = json.load(json_file)返回的就是我们自己组织的数据结构了,如果还是{‘username': name, ‘password': password}这种格式,那么返回就是一个字典对象。
下面我们在通过一个list来看一下:
data = [1,2,3,4,5]
with open('user_info.json', 'w', encoding='utf-8') as json_file:
json.dump(data, json_file, ensure_ascii=False)
with open('user_info.json', 'r', encoding='utf-8') as json_file:
data = json.load(json_file)
print(type(data))
print(data)
运行程序:
<class 'list'>
[1, 2, 3, 4, 5]
补充:Python创建并保存json文件,支持数据更新保存
大家还是直接看代码吧~
import json
class Params():
"""Class that loads hyperparameters from a json file.
Example:
```
params = Params(json_path)
print(params.learning_rate)
params.learning_rate = 0.5 # change the value of learning_rate in params
```
"""
def __init__(self, json_path):
with open(json_path) as f:
params = json.load(f) # 将json格式数据转换为字典
self.__dict__.update(params)
def save(self, json_path):
with open(json_path, 'w') as f:
json.dump(self.__dict__, f, indent=4) # indent缩进级别进行漂亮打印
def update(self, json_path):
"""Loads parameters from json file"""
with open(json_path) as f:
params = json.load(f)
self.__dict__.update(params)
@property # Python内置的@property装饰器就是负责把一个方法变成属性调用的
def dict(self):
"""Gives dict-like access to Params instance by `params.dict['learning_rate']"""
return self.__dict__
if __name__ == '__main__':
parameters = {"SEED": 1,
"dataset": "Omniglot",
"meta_lr": 1e-3,
"num_episodes": 5000,
"num_classes": 5,
"num_samples": 1,
"num_query": 10,
"num_steps": 100,
"num_inner_tasks": 8,
"num_train_updates": 1,
"num_eval_updates": 1,
"save_summary_steps": 100,
"num_workers": 1
}
json_str = json.dumps(parameters, indent=4)
with open('params.json', 'w') as f: # 创建一个params.json文件
f.write(json_str) # 将json_str写到文件中
params = Params('params.json')
params.SEED = 2 # 修改json中的数据
params.save('params.json') # 将修改后的数据保存
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。
来源:https://blog.csdn.net/qingyulove/article/details/81512300
猜你喜欢
- 介绍获取协程返回值的四种方式:1、通过ensure_future获取,本质是future对象中的result方2、使用loop自带的crea
- Rel-License 是微格式的开发标准之一,简单的说就是通过给引用标签(通常是链接)加上REL属性,来标明所引用链接/数据与文章的关系。
- 一、Pandoc转换1.1 问题由于我们markdown编辑器比较特殊,一般情况下,我们不太好看,如果转换成pdf的话,我们就不需要可以的去
- 本文实例讲述了PHP使用星号隐藏用户名,手机和邮箱的实现方法。分享给大家供大家参考,具体如下:PHP使用星号替代用户名手机和邮箱这个在许多的
- 一. 输出函数print在python中,print()是可以直接使用的输出函数,将数据输出到控制台上。1. print函数的使用1.1 可
- choice()方法从一个列表,元组或字符串返回一个随机项。语法以下是choice()方法的语法:choice( seq )注意
- 一、问题描述给定两个字符串,求解这两个字符串的最长公共子序列(Longest Common Sequence)。比如字符串1:BDCABA;
- 对于值传递和引用传递,书本上的解释比较繁琐,而php面试中总会出现,下面我会通过一个生活的例子带大家理解它们之间区别。第一步假设我们去酒店订
- 日常我们见的多的水印大都是做到图片里的,我依据html元素的css position定位作出这个 * 印,供大家参考<!DOCTYPE
- turtle(海龟)是Python重要的标准库之一,它能够进行基本的图形绘制。turtle图形绘制的概念诞生于1969年,成功应用于LOGO
- boto操作import datetimeimport boto.s3.connectionfrom boto.s3.key import
- 本文实例讲述了Python实现读取SQLServer数据并插入到MongoDB数据库的方法。分享给大家供大家参考,具体如下:# -*- co
- 在Dreamweaver 4.0中,我们就已接触了模板与库的概念,知道它们是批量生成风格类似的网页的好工具。如今在Dreamweaver M
- 一、桥接模式桥接模式,希望能够将一个事物的两个维度分离(解耦),使其都可以独立地变化,并通过桥梁连接起来。(类)抽象部分(Abstracti
- 此脚本从给定的网页中检索所有链接,并将其保存为txt文件。(文末有完整源码)这是一个简单的网络爬虫示例,使用了 requests 库来发送
- 上次学会了爬取图片,这次就想着试试爬取商家的联系电话,当然,这里纯属个人技术学习,爬取过后及时删除,不得用于其它违法用途,一切后果自负。首先
- 本文实例讲述了Python面向对象程序设计之类和对象、实例变量、类变量用法。分享给大家供大家参考,具体如下:类和对象:类的定义:用来描述具有
- 从这一章开始进入正式的算法学习。首先我们学习经典而有效的分类算法:决策树分类算法。1、决策树算法决策树用树形结构对样本的属性进行分类,是最直
- whoosh的官方介绍:http://whoosh.readthedocs.io/en/latest/quickstart.html因为做的
- 下表列出了 Microsoft ACCESS 的命令行选项:选项 效果database 打开指定的 Microsoft Access 数据库