Python中存储数据——json模块

ops/2025/3/18 19:47:53/

        很多时候,程序要把信息存储在列表和字典等数据结构中。一种简单的方式是使用json模块来存储数据。

        json模块能够将简单的Python数据结构存储到文件中,并在程序运行时加载文件中的数据。还可以使用json在Python程序之间分享数据。更重要的是,JSON数据格式并非Python专用的,能够将以JSON格式存储的数据与使用其他编程语言的人分享。


JSON(JavaScript Object Notion)格式最初是为JavaScript开发的,随后被包括Python在内的多种语言采用,成了一种常见的格式。

1、使用json.dump()和json.load()

        使用json.dump()来存储数据,使用json.load()来加载数据。

        函数json,dump有两个参数:要存储的数据以及可用的文件对象。

python">import json
numbers =[ 5,4,8,6,2]
filename = 'numbers.json'
with open(filename,'w') as f:json.dump(numbers,f)

        首先导入json模块,创建数据,指定文件名(使用后缀.json来表明文件存储的数据格式为JSON格式)。以写模式打开文件,使用json.dump()存储数据。

numbers.json

python">[5, 4, 8, 6, 2]

        接着使用json.load()将数据加载:

python">import jsonfilename = 'numbers.json'
with open(filename) as f:numbers = json.load(f)
print(numbers)
python">[5, 4, 8, 6, 2]

2、保存和加载用户生成的数据

        还可以使用json保存用户生成的数据,防止程序运行结束时用户信息丢失。

python">import jsonname = input('Please input your name: ')
filename = 'names.json'
with open(filename,'w') as f:json.dump(name, f)print("Hello, " + name)

运行一次:

python">Please input your name: Liang
Hello, Liang

         接着将文件中存储的数据加载:

python">import jsonfilename = 'names.json'
with open(filename) as f:name = json.load(f)print("Hello again, " + name)
python">Hello again, Liang

        可以将两个文件合并为一个文件,使用try-except:

save_name.py

python">import jsonfilename = 'names.json'
try:with open(filename) as f:name = json.load(f)
except FileNotFoundError:name = input('Please input your name: ')with open(filename,'w') as f:json.dump(name, f)print("Hello, " + name)
else:print("Hello again, " + name)

如果文件存在,将文件中的数据加载并执行else中的代码块;否则,执行except中的代码块,提示用户输入姓名并使用json.dump()存储数据到文件。

3、重构

        重构是指这样的过程:代码可以正常运行但可以进一步改进(如将代码划分为一系列完成具体工作的函数)。重构让代码更加清晰、更易于理解、更容易扩展。

        例如,重构上述的save_name.py,划分为多个具体的函数。

save_name.py:

python">import jsondef greet():"""问候用户"""filename = 'names.json'try:with open(filename) as f:name = json.load(f)except FileNotFoundError:name = input('Please input your name: ')with open(filename,'w') as f:json.dump(name, f)print("Hello, " + name)else:print("Hello again, " + name)greet()

定义了一个函数,但该函数执行的内容太多了,还可以进一步细分:

python">import jsondef get_name():"""获取用户名"""filename = 'names.json'try:with open(filename) as f:name = json.load(f)except FileNotFoundError:return Noneelse:return namedef greet():"""问候用户"""name = get_name()if name:print("Hello again, " + name)else:name = input('Please input your name: ')filename = 'names.json'with open(filename, 'w') as f:json.dump(name, f)print("Hello, " + name)greet()

使用了两个函数,但第二个函数还可以进一步划分:

python">import jsondef get_name():"""获取用户名"""filename = 'names.json'try:with open(filename) as f:name = json.load(f)except FileNotFoundError:return Noneelse:return namedef input_name():"""用户输入名字"""name = input('Please input your name: ')filename = 'names.json'with open(filename, 'w') as f:json.dump(name, f)return namedef greet():"""问候用户"""name = get_name()if name:print("Hello again, " + name)else:name = input_name()print("Hello, " + name)greet()

        在最终版本中,每个函数都只执行一项具体而清晰的任务。greet()要么找到文件再次欢迎,要么没找到文件提示用户输入新建文件首次欢迎。get_name()负责获取文件中的姓名,没有该文件则返回None。input_name()负责在没找到文件时,提示用户输入姓名,并创建文件,返回姓名。        

        这种清晰而明确的划分对于编写易于阅读和维护的代码极其重要。


http://www.ppmy.cn/ops/166850.html

相关文章

【开源免费】基于SpringBoot+Vue.JS电商应用系统(JAVA毕业设计)

本文项目编号 T 242 ,文末自助获取源码 \color{red}{T242,文末自助获取源码} T242,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

Deepseek结合企业数据挖掘平台能够给企业提升哪些效益?

Deepseek(深度求索)作为智能系统,在政务办公领域可通过AI技术优化流程、提升效率,具体应用场景分析如下: 1. 智能公文处理与流转 自动分类与审核 利用NLP解析公文内容,自动分类(如请示、报告、通…

LeetCode 解题思路 19(Hot 100)

解题思路(递归): 终止条件: 若节点为空,返回深度0。递归步骤: 分别计算左子树和右子树的最大深度,取较大者并加1(当前节点)。 Java代码: class Solution {…

Useage of Generic in Java

the usage of generic in class // public class A <T>{ //without specify a parent class or implemented interface as the super bound for generic typeT n;public void printstr(){System.out.println(n);}A(T a){this.na;System.out.println("A构建成功…

java使用(Preference、Properties、XML、JSON)实现处理(读写)配置信息或者用户首选项的方式的代码示例和表格对比

在Java应用程序中&#xff0c;处理应用首选项&#xff08;preferences&#xff09;有多种方法&#xff0c;包括使用java.util.prefs.Preferences类、属性文件&#xff08;如.properties文件&#xff09;、XML文件和JSON文件。下面是每种方法的详细说明和代码示例&#xff0c;最…

python-数据结构汇总,树图、代码讲解(字符串、数组、字典、集合、元组)

一、字符串&#xff08;str&#xff09; 1.增操作 1.1‘’符号拼接字符串 str1"I love"; str2"you"; #直接使用‘’符号拼接字符串变成一个字符串 str str1str2 print(str) #打印出 I love you 1.2join()方法&#xff0c;可以将列表、元组中的字符串合…

DeepSeek 3FS集群化部署临时笔记

DeepSeek 3FS集群化部署临时笔记 一、3FS集群化部署1、环境介绍2、对应的软件包安装3、编译4、部署4.1 部署monitor_collector_mainStep 2: Admin clientStep 3: Mgmtd serviceStep 4: Meta serviceStep 5: Storage serviceStep 6: Create admin user, storage targets and cha…

Linux编辑器

Linux编辑器 yum yum是包管理器,类似于Linux的应用商店,安装和卸载工具需要使用yum,Linux系统中是预装了yum的 rzsz工具: Linux和window的文件互传工具 yum install lrzsz 查看所有的软件列表: yum list el代表centos,base代表软件的提供方是base 卸载软件 yum remove l…