当前位置: 首页 > news >正文

python如何通过json以及pickle读写保存数据

记录信息

比如说我写了这样一段程序,记录了爱吃的食物:

food_list = []while True:c = input("输入1添加新的食物,输入2查询已添加的食物,输入exit退出:")if c == "1":new_food = input("输入你喜欢的食物:")food_list.append(new_food)print("添加成功!")elif c == "2":for i in food_list:print(i, end=" ")print()elif c == "exit":print("谢谢,下次再见!")break

但是,很快就会发现这样一个问题,当我们下次再运行程序的时候,上次输入的内容全都没了,怎么会这样呢?

原理其实很简单,在程序运行的时候,我们存储的信息放入了python的列表之中,这些信息是保存在内存之中的,当程序运行结束,这些信息就没了。

那么,如果我希望将输入保存起来,下次还能看到,该怎么办呢?这个时候,就需要将要保存的内容存储到文件了。

json存储数据

json介绍

json,全名:JavaScript Object Notation,是一种轻量级的数据交换格式,最初基于JavaScript,但是后来随着发展,现在几乎被所有编程语言支持。

json数据非常适合人类阅读和编写,也可以在网络应用中进行数据传输,当然也可以作为数据存储。最常见的json数据类型包括object(对象),以及array(数组)。

json对象:

{"name": "仙草","age": 18,"isStudent": false
}

json数组:

["啃达鸡美食", "疯狂星期四", "可口可乐"]

对于python中的数据类型来说,列表会被保存为json数组,而字典会被保存为json对象。

json写入文件

import json# 需要保存的数据
data = [1, 2, 3, 4, 5]# 转为json数据
json_data = json.dumps(data)# 写入文件
with open("record.json", "w") as f:f.write(json_data)

json文件读取

import jsonwith open("record.json", "r") as f:json_data = f.read()data = json.loads(json_data)

为程序添加保存读取

import jsontry:with open("food_list.json", "r") as file:food_list = json.load(file)
except FileNotFoundError:food_list = []while True:c = input("输入1添加新的食物,输入2查询已添加的食物,输入exit退出:")if c == "1":new_food = input("输入你喜欢的食物:")food_list.append(new_food)print("添加成功!")with open("food_list.json", "w") as file:file.write(json.dumps(food_list))elif c == "2":for i in food_list:print(i, end=" ")print()elif c == "exit":print("谢谢,下次再见!")break

pickle序列化

pickle介绍

pickle可以对一个python对象进行二进制序列化以及反序列化,比起json,使用pickle的一个好处是,pickle可以保存任意一个python对象,例如类或者函数,但是json则不能直接这样做。

注意:pickle具有危险性,因此,不要加载你不信任的内容,必须使用可信任的数据。

pickle写入文件

import pickledata = [1, 2, 3, 4, 5]with open("data.pkl", "wb") as f:pickle.dump(data, f)

pickle文件读取

import picklewith open("data.pkl", "rb") as f:loaded_data = pickle.load(f)print(loaded_data)

pickle具有安全风险

在python的官方文档上,有这样一段重要提示:“如果解序化的数据是由手段高明的攻击者精心设计的,这种不受信任来源的pickle数据可以执行任意代码。”

很多人对此有一些困惑,真的有这么严重吗?答案是肯定的。假设,有这样一段恶意代码:

import pickle
import osclass Example:def __reduce__(self):return (os.system, ('echo "不能随便使用危险的代码!"',))malicious_data = pickle.dumps(Example())with open("malicious.pkl", "wb") as file:file.write(malicious_data)

此时, 当代码重新被加载的时候,就会执行恶意代码,调用系统命令。

import picklewith open("malicious.pkl", "rb") as file:data = pickle.load(file)

安全使用pickle

一种安全使用自己生成的pickle的方法,是使用hmac对序列化的数据进行签名,下次使用的时候进行签名的认证,以保证当初生成的pickle没有被他人篡改。下面是一种可能的实现:

import pickle
import hmac
import hashlibsecret_key = b"your-secret-key"def save_signed_pickle(data, file_path, key):# 使用pickle序列化数据serialized_data = pickle.dumps(data)# 生成签名signature = hmac.new(key, serialized_data, hashlib.sha256).digest()# 将签名和序列化数据一起保存到文件with open(file_path, "wb") as f:f.write(signature)f.write(serialized_data)def load_signed_pickle(file_path, key):# 从文件加载数据并验证签名with open(file_path, "rb") as f:signature = f.read(32)  # 签名长度为32字节,因此恰好可以读取到签名serialized_data = f.read()# 重新计算签名并进行验证expected_signature = hmac.new(key, serialized_data, hashlib.sha256).digest()if hmac.compare_digest(signature, expected_signature):# 签名匹配,说明数据未被篡改,可以安全反序列化return pickle.loads(serialized_data)else:# 签名不匹配,数据可能已被篡改raise ValueError("Data integrity check failed!")

相关文章:

python如何通过json以及pickle读写保存数据

记录信息 比如说我写了这样一段程序,记录了爱吃的食物: food_list []while True:c input("输入1添加新的食物,输入2查询已添加的食物,输入exit退出:")if c "1":new_food input("输入你…...

【SPIE出版,EI检索稳定】2024年人机交互与虚拟现实国际会议(HCIVR 2024,11月15-17日)

2024年人机交互与虚拟现实国际会议(HCIVR 2024) 2024 International Conference on Human-Computer Interaction and Virtual Reality 官方信息 会议官网:www.hcivr.org 2024 International Conference on Human-Computer Interaction and …...

Linux vim编辑器

前言: 首先我们来了解一下什么是编辑器,通常我们在widow系统下例如C/C我们进行写代码时,我们通过vs2022等等编译器进行,这里的编译器是一种IDE(集成开发环境),集成开发环境是将代码编辑器、编译…...

普推知产:申请商标名称从4字改成3字下了初审!

近日7月的时候普推知产老杨帮客户申请的水果猕猴桃31类商标,初步审定公告下来了,基本没什么问题三个月公告结束后一个月内就可以拿到商标注册证,客户所在地全国有名猕猴桃之县,同质化竞争还得需要商标才可以。 刚开始了解到这位做…...

Flink 状态精准一次性特性

Flink 的一个重大价值在于, 它既保证了 exactly-once ,也具有低延迟和高吞吐 的处理能力 。 1.端到端(End-To-End)状态一致性 端到端的一致性保证,意味着结果的正确性贯穿了整个流处理应用的始终;每 一…...

算法笔记day08

1.游游的水果大礼包 这道题很容易让人想到贪心,但是其实是一道枚举题,只需举一个反例,贪心无非就是哪个礼包价值大,就优先组成哪个礼包。 算法思路: 设可以组成x个a礼包,y个b礼包,求ax by的最…...

在Selenium中有哪些元素对象操作方法?( ̄﹃ ̄)

在Selenium中,driver.find_element() 方法用于定位页面上的单个元素。一旦你定位到了一个元素,你可以对这个元素执行多种操作。此外,driver.find_element() 只是定位元素的方法之一,它还有其他一些相关的方法和属性,但…...

sqli-labs靶场安装以及刷题记录-docker

sqli-labs靶场安装以及刷题记录-docker sqli-labs靶场安装-dockersqli-labs靶场刷题less-1 单引号less-2 数字型less-3 单引号括号less-4 双引号括号less-5 单引号布尔盲注less-6 双引号布尔盲注less-7 单引号加括号、输出到文件less-8 单引号布尔盲注less-9 单引号时间盲注les…...

谷歌仓库管理工具repo

Google 的仓库管理工具 Repo 是一个用于管理包含多个 Git 仓库的大型项目的命令行工具。它最初由 Google 为 Android 操作系统开发,以简化和协调众多子项目的版本控制和协作过程。以下是对 Repo 的详细解释: 主要功能与特点 多仓库管理: Rep…...

C#的自定义Tip窗体 - 开源研究系列文章

上次编写了自定义的提示和对话框窗体,这次记录的是自定义的Tip窗体,用于显示提示操作。有时间没编程了,这次就当进行了记录。 1、 项目目录; 2、 源码介绍; 1) 实现; 2) 应用; 3、 运行界面&…...

目前最新 Reflector V11.1.0.2067版本 .NET 反编译软件

目前最新 Reflector V11.1.0.2067版本 .NET 反编译软件 一、简介二、.NET Reflector的主要功能包括:1. **反编译**: 反编译是将已编译的.NET程序集(如.dll或.exe文件)转换回可读的源代码。这使得开发者可以查看和学习第三方库的实现细节&…...

软考:CORBA架构

CORBA过时了吗 CORBA指南 个人小结: IPC,进程间通信,Socket应用在不同机器之间的通信 RPC是一种技术思想而非一种规范 但站在八九十年代的当口,简单来说,就是我在本地调用了一个函数,或者对象的方法&…...

qt QSaveFile详解

QSaveFile 是 Qt 提供的一个类,用于安全地保存文件。它的主要特点是在写入文件时确保数据完整性,以防止文件损坏。使用 QSaveFile,您可以创建一个临时文件,并在成功写入后将其重命名为目标文件,这样可以避免在写入过程…...

【Linux】线程池详解及其基本架构与单例模式实现

目录 1.关于线程池的基本理论 1.1.线程池是什么? 1.2.线程池的应用场景: 2.线程池的基本架构 2.1.线程容器 2.2.任务队列 2.3.线程函数(HandlerTask) 2.4.线程唤醒机制 3.添加单例模式 3.1.单例模式是什么&…...

运输层知识点汇总3

目录 前言 二、为什么在TCP首部中有一个首部长度字段,而UDP的首部就没有这个字段? 三、一个TCP报文段的数据部分最多为多少字节?为什么?如果用户要传送的数据的字节长度超过TCP报文段中的序号字段可能编出的最大序号&#xff0…...

浔川社团官方联合会提前入驻

近期,我们浔川社团官方发现文章再次被不明网站转发。这一情况引起了我们的高度警觉和深刻反思。我们一直致力于为大家提供高质量、有价值的内容,用心创作每一篇文章,以展现我们社团的风采和理念。然而,这些不明网站未经授权的转发…...

比例数据可视化(Python实现板块层级图绘制)——Instacart Market Basket Analysis

【实验名称】 实验一:绘制板块层级图 【实验目的】 1. 掌握数据文件读取 2. 掌握数据处理的方法 3. 实现板块层级图的绘制 【数据介绍】Instacart Market Basket Analysis 1. 数据说明 数据共有300 0000orders, 20 0000users, …...

C++研发笔记8——C语言程序设计初阶学习笔记6

在第一部分——课前准备的学习中,我就提到了学习C语言的过程中,练习是必不可少的环节,所以本篇笔记我们来进行记录我们学习《C语言程序设计初阶》阶段的第一篇练习文章。 题目一 下面哪个不是C语言内置的数据类型: A.char B.d…...

0softmax和背后的最大熵(极大似然法)

只要无穷阶矩都一样,那么两个分布一定一样。 整理思路:1、设定样本的概率模型与目标概率模型一致(两个模型特性函数一致)建立服从伯努利分布的变量(此处需要理解样本空间及变量的关系)对两个模型进行降维&a…...

6,000 个网站上的假 WordPress 插件提示用户安装恶意软件

黑客使用窃取的凭证感染 WordPress 网站,并向其发送虚假插件,通过虚假的浏览器更新提示向最终用户发送恶意软件和信息窃取程序。 该恶意活动基于ClickFix假浏览器更新恶意软件的新变种,自 2024 年 6 月以来已使用假 WordPress 插件感染了超过…...

银河麒麟V4.0.2-sp4服务器到手后,这三步网络配置(IP/DNS/源)一个都不能少

银河麒麟V4.0.2-sp4服务器网络配置实战指南:从零搭建稳定运行环境 刚拿到一台预装银河麒麟V4.0.2-sp4操作系统的服务器时,许多运维工程师常会陷入"有设备却用不起来"的困境——无法远程连接、软件包安装失败、系统更新卡壳,这些问题…...

实战指南:用快马为django项目生成定制化vmware开发环境,开箱即用

实战指南:用快马为Django项目生成定制化VMware开发环境,开箱即用 在实际开发场景中,虚拟机环境需要与具体项目需求紧密结合。最近我在做一个Django项目时,发现每次换电脑或重装系统都要重新配置开发环境,特别浪费时间…...

基于FDM - EDFM的油气藏地层压力场计算:MATLAB实战

基于有限差分-嵌入式离散裂缝网络(FDM-EDFM)的油气藏地层压力场计算,通过matlab代码实现,可提供理论指导和相关问题,可计算不同裂缝网络的压力分布。在油气藏工程领域,准确计算地层压力场对于理解油藏动态、…...

WorkBuddy杀疯了?一群AI专家帮我打工,我在微信里当赛博虾工头!

梦瑶 发自 凹非寺量子位 | 公众号 QbitAI到底是谁说,给老板打工自己就当不成老板的?又是谁说,龙虾不好用、还不听使唤的?反正这些事儿,现在跟我没啥关系了。毕竟现在的我,已经转头当起了「虾工头」&#xf…...

手把手教你用NOAA气象数据做可视化分析(含常见字段解析与避坑指南)

手把手教你用NOAA气象数据做可视化分析(含常见字段解析与避坑指南) 气象数据可视化是理解气候模式、分析极端天气事件的重要工具。美国国家海洋和大气管理局(NOAA)提供的全球历史气候网络日数据(GHCN-Daily&#xff0…...

Angular Flex-Layout终极指南:掌握fxLayout、fxFlex、fxLayoutAlign核心指令

Angular Flex-Layout终极指南:掌握fxLayout、fxFlex、fxLayoutAlign核心指令 【免费下载链接】flex-layout Provides HTML UI layout for Angular applications; using Flexbox and a Responsive API 项目地址: https://gitcode.com/gh_mirrors/fl/flex-layout …...

故障发现滞后、处置不及时引发的业务中断与数据风险,超自动化巡检帮您解决

在数字化业务高度依赖IT系统的今天,每一次故障发现滞后、每一次处置不及时,都可能引发连锁反应——从关键业务中断到核心数据泄露,损失往往远超预期。传统运维模式在应对现代复杂系统时已显疲态,而超自动化巡检正成为破解这一困局…...

从 POST 到落库回写:彻底讲透 SAP Gateway 中 Create Operation 的实现

在经典的 SAP Gateway 开发里,Create Operation 看上去只是一次新增动作,真正落到运行时,却牵涉到一条非常完整的链路:客户端发起 HTTP POST 请求,请求体里的 OData 数据被 Gateway 运行时反序列化成 ABAP 结构,开发者在对应的 <Entity Set>_CREATE_ENTITY 方法里接…...

OLED屏幕清屏函数全解析:从基础到局部刷新(附代码示例)

OLED屏幕清屏函数全解析&#xff1a;从基础到局部刷新&#xff08;附代码示例&#xff09; 第一次接触OLED开发时&#xff0c;最让我困惑的就是屏幕刷新机制。记得当时为了调试一个简单的数字显示功能&#xff0c;反复调用全屏刷新导致屏幕闪烁严重&#xff0c;用户体验极差。后…...

别再只用Cesium了!Three.js + Cesium 1.8 整合实战:从零搞定天地图中文底图与BIM模型加载

Three.js与Cesium 1.8深度整合实战&#xff1a;天地图中文底图与BIM模型加载全解析 当我们需要在三维地理信息系统中同时展示宏观地理环境和精细建筑内部结构时&#xff0c;单独使用Cesium或Three.js往往难以完美兼顾。本文将带你完成一次技术栈的深度整合&#xff0c;解决国内…...