python 存储json数据的操作

本篇我们将学习简单的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')  # 将修改后的数据保存

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • Python数据分析入门之教你怎么搭建环境

    一.Anaconda Anaconda(水蟒)是一个捆绑了Python.conda.其他相关依赖包的一个软件.包含了180多个可学计算包及其依赖.Anaconda3是集成了Python3的环境,Anaconda2是集成了Python2的环境.Anaconda默认集成的包,是属于内置的Python的包.并且支持绝大部分操作系统(比如:Windows.Mac.Linux等).下载地址如下:https://www.anaconda.com/distribution/(如果官网下载太慢,可以在清华大学开

  • python学习之panda数据分析核心支持库

    前言 Python是一门实现数据可视化很好的语言,他们里面的很多库可以很好的画出图形,形象明了. 今天我们就来说说:Pandas数据分析核心支持库 初识Pandas: Pandas 是 Python 语言的一个扩展程序库,用于数据分析. Pandas 是一个开放源码.BSD 许可的库,提供高性能.易于使用的数据结构和数据分析工具. Pandas 名字衍生自术语 "panel data"(面板数据)和 "Python data analysis"(Python 数据分

  • Python基础之操作MySQL数据库

    一.数据库操作 1.1 安装PyMySQL pip install PyMySQL 1.2 连接数据库 python连接test数据库 import pymysql host = 'localhost' # 主机地址 username = 'root' # 数据库用户名 password = '' # 数据库密码 db_name = 'test' # 数据库名称 # 创建connect对象 connect = pymysql.connect(host=host, user=username, p

  • python pickle存储、读取大数据量列表、字典数据的方法

    先给大家介绍下python pickle存储.读取大数据量列表.字典的数据 针对于数据量比较大的列表.字典,可以采用将其加工为数据包来调用,减小文件大小 #列表 #存储 list1 = [123,'xiaopingguo',54,[90,78]] list_file = open('list1.pickle','wb') pickle.dump(list1,list_file) list_file.close() #读取 list_file = open('list1.pickle','rb')

  • 详解python数据结构之栈stack

    前言 栈(Stack)是一种运算受限的线性表. 按照先进后出(FILO,First In Last Out)的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶.栈只能在一端进行插入和删除操作. 文章内容包含: (1)栈的基本格式 (2)压栈 push_stack (3)出栈 pop_stack (4)取栈顶 peek_stack 一.栈的基本格式 class Stack(): def __init__ (self,size): self.size = size #栈空间大小 self.to

  • 详解python数据结构之队列Queue

    一.前言 队列Queue是一种先进先出(FIFO,First In First Out)的线性表.允许一端进行插入(rear),对应的另一段进行删除(front). 本篇包含以下内容: (1)Queue的基本格式 (2)入队列en_queue (3)删除数据函数 de_queue 二.Queue的基本格式 class Queue(): def __init__(self,size): self.size = size self.front = -1 #设置front初始值,每出队列一个数据就加

  • Python入门之使用pandas分析excel数据

    1.问题 在python中,读写excel数据方法很多,比如xlrd.xlwt和openpyxl,实际上限制比较多,不是很方便.比如openpyxl也不支持csv格式.有没有更好的方法? 2.方案 更好的方法可以使用pandas,虽然pandas不是专门处理excel数据,但处理excel数据确实很方便. 本文使用excel的数据来自网络,数据内容如下: 2.1.安装 使用pip进行安装. pip3 install pandas 导入pandas: import pandas as pd 下文使

  • python利用Excel读取和存储测试数据完成接口自动化教程

    http_request2.py用于发起http请求 #读取多条测试用例 #1.导入requests模块 import requests #从 class_12_19.do_excel1导入read_data函数 from do_excel2 import read_data from do_excel2 import write_data from do_excel2 import count_case #定义http请求函数 COOKIE=None def http_request2(met

  • python保存大型 .mat 数据文件报错超出 IO 限制的操作

    python 保存 .mat 文件的大小是有限制的,似乎是 5G 以内,如果需要保存几十个 G 的数据的话,可以选用其他方式, 比如 h5 文件 import h5py def h5_data_write(train_data, train_label, test_data, test_label, shuffled_flag): print("h5py文件正在写入磁盘...") save_path = "../save_test/" + "train_t

  • Python数据分析入门之数据读取与存储

    一.图示 二.csv文件 1.读取csv文件read_csv(file_path or buf,usecols,encoding):file_path:文件路径,usecols:指定读取的列名,encoding:编码 data = pd.read_csv('d:/test_data/food_rank.csv',encoding='utf8') data.head() name num 0 酥油茶 219.0 1 青稞酒 95.0 2 酸奶 62.0 3 糌粑 16.0 4 琵琶肉 2.0 #指

  • python中必会的四大高级数据类型(字符,元组,列表,字典)

    一. 字符串 生活中我们经常坐大巴车,每个座位一个编号,一个位置对应一个下标. 字符串中也有下标,要取出字符串中的部分数据,可以用下标取. python中使用切片来截取字符串其中的一段内容,切片截取的内容不包含结束下标对应的数据. 切片使用语法:[起始下标:结束下标:步长] ,步长指的是隔几个下标获取一个字符. 注意:下标会越界,切片不会 常用函数 练习: Test='rodma ' print(type(Test)) print('Test的一个字符串%s'%Test[0])#跟数组差不多 #

随机推荐