初学者python笔记(json模块、pickle模块、xml模块、shelve模块)

【Python】 Shelve 模块 数据持久化的方法多种多样,从简单的文本文件(CSV, JSON, XML)到复杂的关系型数据库(MySQL, PostgreSQL, SQLite)和非关系型数据库(Redis, MongoDB),每种方案都有其特定的适用场景和优劣。然而,对于Python开发者而言,有时我们需要一种介于“普通文件存储”和“完整数据库系统”之间的轻量级解决方案——它既能提供比纯文本文件更便捷的结构化数据访问方式,又无需部署和维护一个复杂的数据库服务器。正是在这样的背景下,Python标准库中的模块应运而生。模块提供了一个简单 阅读详情


在Python中,json模块、pickle模块、xml模块、shelve模块这四个模块都是数据交换的桥梁。
所谓数据交换,简单来说就是每门编程语言都有自己对应的数据类型,如果要在不同的语言或程序之间进行数据交换,需要用这四个模块转换一下,这样就能保证原有的数据类型不会变。其中json模块是最好用的。

json模块

每门语言都遵守json字符串的规则,就可以相互之间交换数据,并且保证数据类型不会变

正常数据转化(复杂)
#写入文件
#dic = "{'name':'Ross'}" #将字典转成字符串
#f = open('test.txt','w')  #以可读方式打开文件
#f.write(dic)  #将转化成字符串的字典写入,写入后已经不是一个字典了
#f.close()

#读取文件
f_read = open('test.txt','r')
data = f_read.read()  #将文件字符读取出来
print(type(data))  #发现读取出的不再是字典,只是字符串
data = eval(data)  #将字符串转成对应的字典
print(data['name'])  #去name对应的值

先将下面注释掉,执行写入文件那一段代码;再将写入文件注释,执行读取文件那一段,
运行结果:
<class ‘str’>
Ross

json模块的相关操作
  1. json字符串: 依照json的规则来存储的一类字符串

  2. 转化成json字符串

import json  #导入json模块
dic = {'name':'Ross'}
li = [11,33,22]
data = json.dumps(dic)  #将其他类型转成json字符串类型
data2 = json.dumps(li)
print(data)
print(data2)
print(type(data))  #输出元素的类型
print(type(data2))

运行结果:
{“name”: “Ross”}
[11, 33, 22]
<class ‘str’>
<class ‘str’>
可以看到,在json字符串中,所有的单引号都会变成双引号

  1. json在文件中操作(dumps()、loads())
import json  #导入json模块

#写入文件
'''dic = {'name':'Ross'}
dic_str = json.dumps(dic)  #将字典封装成json字符串
with open('test.txt','w',encoding='gbk') as f:  #windows默认编码'gbk'
    f.write(dic_str)'''

#读取文件
with open('test.txt','r') as f_read:
    data = json.loads(f_read.read())  #载入json字符串,用loads()方法将其转回原来的字典类型
    print(data)
    print(type(data))  #类型已经变回字典了
    print(data['name'])  #用name去对应的值

同样先将下面注释掉,执行写入文件那一段代码;再将写入文件注释,执行读取文件那一段,
运行结果:
{‘name’: ‘Ross’}
<class ‘dict’>
Ross

  1. json在文件中操作(dump()、load())
    与dumps()和loads()的区别是,dump()、load()专门处理文件
import json  #导入json模块

#写入文件
'''dic = {'name':'Ross'}
with open('test.txt','r+',encoding='gbk') as f:
    json.dump(dic,f)  #将字典封装成json字符串,并写入f这个打开的文件'''

#读取文件
with open('test.txt','r') as f_read:
    data = json.load(f_read)
    #载入json字符串,用load()方法将其转回原来的字典类型
    #与loads()不同,这里只需要传入文件名就行,不需要读的操作
    print(data)
    print(type(data))  #类型已经变回字典了
    print(data['name'])  #用name去对应的值

先执行写入文件,再执行读取文件,
运行结果:
{‘name’: ‘Ross’}
<class ‘dict’>
Ross

  1. 只要符合json规则的字符串就可以用loads() 转成相应类型
import json  #导入json模块

dic_str = '{"name":"Ross"}'  #一个符合json规范的字符串
data = json.loads(dic_str)
print(type(data))

运行结果:
<class ‘dict’>

pickle模块

在作用上与json几乎完全相同,参见篇首json的作用,但是pickle是用二进制储存,json是用json字符串储存,一般用json就够了

import pickle  #导入pickle模块

dic = {'name':'Ross'}
dic_str = pickle.dumps(str)  #pickle成字符串
data = pickle.loads(dic_str)  #载入成字符串对应的字节,但其实就是字典类型
print(type(data))  #最终是一个字节类型

运行结果:
<class ‘type’>

shelve模块

shelve模块比pickle模块用法简单,只有一个open函数,返回类似字典的对象,可读可写;
但是字典的key必须为字符串,而值可以是python所支持的数据类

import shelve
 
f = shelve.open(r'test.txt')  #直接就可以用shelve打开文件

#写入文件
f['stu1']={'name':'alex','age':'18'}  #stul、stu2是需要添加字典的键,字典中分别加入了两个键值对
f['stu2']={'name':'alvin','age':'20'}
f['school']={'website':'Iloveyou.com','city':'Sichuan'}
f.close()

#读取文件
#print(f.get('stu_info')['age'])

同样,先执行写入文件,再执行读取文件

xml模块

xml也是进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,由于xml诞生很早,传统行业用的人比较多,至今很多传统公司如金融行业的很多系统的接口还主要是xml。

  1. xml数据的样式
    很明显,是由一对一对标签嵌套组成的,标签内写入属性,成对的标签之间嵌入新标签
<?xml version="1.0"?>
<data>
    <country name="China">
        <rank updated="yes">2</rank>
        <year>2018</year>
    </country>
    <country name="America">
        <rank updated="yes">5</rank>
        <year>2019</year>
    </country>
    <country name="Singapore">
        <rank updated="yes">69</rank>
        <year>2011</year>
        <neighbor name="Costa Rica" direction="W"/>
    </country>
</data>
  1. 导入xml模块
import xml.etree.ElementTree as ET
  1. 修改与删除标签
#修改
for node in root.iter('year'):
    new_year = int(node.text) + 1  #把年份都加1
    node.set("updated","yes")  #更新数据
tree.write("xmltest.xml")  #写入xml文件

#删除node
for country in root.findall('country'):  #遍历每个国家的rank标签
   rank = int(country.find('rank').text)
   if rank > 50:
     root.remove(country)
tree.write('output.xml')

到此为止,数据交换方面的四大模块,json模块、pickle模块、xml模块、shelve模块都总结完了。其实,如果熟练的话,一个json模块就够用了

《Python全栈开发:Python 模块(json,pickle,shelve)》 一、json介绍 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写。 如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON,因为JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。JSON不仅是标准格式,并且比XML更快,而且可以直... 阅读详情

相关推荐

基于 openEuler 24.03 LTS 源码编译安装 Zabbix 7.4

Zabbix是一款开源的企业级分布式监控系统,支持网络、服务器、应用等多种IT资源的监控。核心功能包括数据采集、告警通知、可视化展示等,采用Server/Agent架构,支持多种操作系统。本文详细介绍了在openEuler 24.03系统上部署Zabbix 7.4.2的完整流程,包括环境准备、MySQL配置、PHP/Apache安装、Zabbix编译安装等步骤,为构建企业级监控系统提供了实践指导。

广然笔记 1188

文件操作-序列化json-pickle-yaml

Terminal 终端 >>> path = os.path.join(current_path,'aa.txt') >>> f = open(path,'w') >>> f.write('你好呀~') 4 >>> f.close() >>> f = open(path,'w+') >>> f.write('再见,测试~') 6 >>> f.close() >>>

NLstudy33的博客 475

手把手教你用CMake和MinGW64编译libuvc:静态链接与动态链接的选择

本文详细指导如何在Windows平台上使用CMake和MinGW64编译libuvc库,并深入探讨静态链接与动态链接的选择策略。通过对比两种链接方式在部署复杂度、内存占用和版本管理等方面的差异,帮助开发者根据项目需求做出最优决策,实现高效的USB摄像头开发。

weixin_29171087的博客 253

【pickle】详解python中的pickle模块(常用函数、示例)

序列化:把对象转换为字节序列的过程称为对象的序列化。反序列化:把字节序列恢复为对象的过程称为对象的反序列化。python中的pickle模块实现了基本的数据序列化和反序列化。通过pickle模块的序列化操作能够将程序中运行的对象信息保存到文件中去,永久存储;通过pickle模块的反序列化操作,能够从文件中创建上一次程序保存的对象。pickle模块使用的数据格式是python专用的,能够把python对象直接保存到文件,而不需要转化为字符串,也不用底层的文件访问操作把它们写入到一个二进制文件中。函数的功能:将

程序星空实验室 1万+

运行stable-diffusion出现的问题

解决:即用 https://github.com/CompVis/taming-transformers/blob/master/taming/modules/vqvae/quantize.py 新文件,替换错误提示文件中的全部内容即可。5.新建文件夹 CompVis/stable-diffusion-safety-checker/将下载的四个文件放入 解决!后面还会遇到'openai/clip-vit-large-patch14离线下载的问题,同样步骤解决。解决:下载后离线,步骤如下。

weixin_52121118的博客 2345

AIGC实战:用ComfyUI和Lora微调打造专属原神角色(含完整工作流)

本文详细介绍了如何利用ComfyUI和Lora微调技术打造专属原神风格角色,涵盖从环境配置、数据集准备到工作流构建和Lora训练的全过程。通过模块化节点设计和高级控制技术,创作者可实现高度个性化的AIGC艺术创作,提升二次元角色生成的效率与质量。

weixin_29185199的博客 347

Python pickle模块学习(超级详细)

Python pickle模块学习

快递小可的博客 17万+

无线充电效率从75%到90%+:深入拆解LCC补偿网络如何成为电动汽车和智能车竞赛的‘稳压器’

本文深入探讨了LCC补偿网络如何显著提升无线充电效率至90%以上,成为电动汽车和智能车竞赛中的关键技术。通过分析LCC的三元件结构和双模式切换特性,揭示了其在负载突变和线圈错位情况下的稳定性优势,并展示了实际应用中的效率提升和产业化挑战。

weixin_42528191的博客 396

数据持久化的利器,Python中的pickle模块详解

pickle是Python标准库中的一个模块,用于将Python对象序列化(pickling)为二进制数据,以及从二进制数据反序列化(unpickling)为Python对象。这个模块对于在不同的Python程序之间传递数据或将数据存储到文件中非常有用。pickle模块支持几乎所有的Python对象,包括自定义对象,但不适用于存储与Python解释器状态相关的对象,如打开的文件、套接字连接等。pickle模块是Python中用于序列化和反序列化数据的强大工具。

涛哥聊Python 1970

10万张数据集持续迭代:YOLO模型的场景专属自进化体系如何搭建?

做工业质检的朋友应该都有过这样的经历——拿着在COCO上刷榜的YOLO模型跑到产线上一测,精度直接腰斩。这不是模型不行,是场景不对口。过去一年,我深度参与了一个工业视觉项目:产线每天产生超过10万张图像,需要持续迭代检测模型。我们踩过无数坑,最终摸索出一套YOLO模型的场景专属自进化体系。今天不聊虚的,直接上干货。让模型在真实场景数据中持续学习、自动进化,而不是每次依赖人工标注从头训练。下面我从主动学习筛选、增量持续学习、架构选型、部署优化、安全防护五个维度,拆解整个搭建过程。声明。

2601_95807009的博客 106

Android Treble 简介

上面两段话来自官网上,Android 8.0 重新设计了 Android 操作系统框架(在一个名为“Treble”的项目中),以便让制造商能够以更低的成本更轻松、更快速地将设备更新到新版 Android 系统。本文主要整理一下Android Treble框架。

私房菜 9272

Python序列化模块pickle详解

pickle模块是Python标准库中用于对象序列化和反序列化的模块,它可以将Python对象转换为字节流(序列化),也可以将字节流转换回Python对象(反序列化)。这个模块在数据持久化、进程间通信、分布式计算等场景中非常有用。# 自定义序列化过程# 自定义反序列化过程pickle模块是Python中强大的序列化工具。通过合理使用pickle实现数据持久化进行进程间通信支持分布式计算优化数据存储提高开发效率注意安全性问题选择合适的协议版本优化序列化性能处理兼容性问题。

Aerkui的博客 1734

SAPGUI excel 导出时遇到的运行时错误:STRING_SIZE_TOO_LARGE

当报表导出需求远超单一 XLSX 文件的物理承载力时,与其在 SAPGUI 中硬拼 2 GB 限制,不如把分页、过滤、流式写入作为设计前提。掌握 ABAP2XLSX 或 CSV + Power Query 等工具链,既能满足审计合规,又能让应用服务器远离的噩梦。祝你在下一次导出海量数据时,既高效又优雅。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 638

Python - 序列化模块 - pickle、json、shelve、xml

目录 一、序列化基础知识 二、pickle 模块:处理 python 所有数据,只能用于 python 2-1 pickle序列化 2-2 pickle反序列化 三、json 模块:处理 JSON 字符串 3-0 源码信息详解 3-0-1 dump 3-0-2 dumps 3-0-3 load 3-0-4 loads 3-1 json 序列化 3-2 json 反序列化 ...

LIN的博客 462

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Python基础16 模块(5)常用标准库模块 json、pickle、shelve、xml

Python基础16 模块(5)常用标准库模块 json、pickle、shelve、xml

weixin_42830015的博客 590

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Python数据序列化(json、pickle、shelve)

Python数据序列化(json、pickle、shelve)一、前言1. 现实需求2.数据格式3. 序列化/反序列化4.相关模块二、json模块1. 序列化与反序列化2. JSON与Python之间数据类型对应关系3. 实例:内置数据类型序列化/反序列化4. 实例:自定义数据类型的序列化/反序列化方法1:编写转换函数方法2:继承JSONEncoder和JSONDecoder实现子类三、pickle模块1. pickle模块与json模块对比2. pickle模块使用的数据流格式3. pickle模块提供的

Xav Pun的博客 816

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

json、pickle、shelve、XML、​ configparser​模块

序列化是干啥用的?JSON编码器和解码器(通用)json,用于字符串 和 python数据类型间进行转换Json模块提供了四个功能:dumps、dump、loads、load序列化是干啥用的?虚拟机挂起时,保存的状态保存在文件里,怎么样保存的,相当于把内存中的数据对象复制下来保存到硬盘里,内存的数据对象可不只字符串,序列化就是把内存的数据对象转换成字符串。

m0_51736952的博客 469

pickle json xml shelve configparser模块

一 pickle pickle是一个用来序列化的模块 序列化是什么? 指的是将内存中的数据结构转化为一种中间格式 并存储到硬盘上 反序列化是什么? 将硬盘上存储的中间格式数据再还原为内存中的数据结构 为什么要学序列化? 就是为了将数据持久存储 之前学过的文件也能完成持久化存储 但是操作起来非常麻烦 pickle模块主要功能 dump 序列化...

dkxy35121的博客 169

python 序列化及其相关模块(json,pickle,shelve,xml)详解

python序列化什么是序列化?为什么要序列化和它的作用?什么是序列化对象?什么可以序列化操作?json和pickle模块优点和缺点举例shelve模块xml模块举例Json和XML的比较 什么是序列化? 序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受bytes 为什么要序列化和它的作用? 举个例子,你在打游戏过程中,打累了,想过两天再玩,两天之后,游戏又从你上次停止的地方继续运行,你上次游戏的进度肯定保存到硬盘上了,那么是以何种形式呢?游戏过

qq_44611586的博客 348

Python之数据序列化(json、pickle、shelve)

本节内容 前言json模块pickle模块shelve模块总结 一、前言 1. 现实需求 每种编程语言都有各自的数据类型,其中面向对象的编程语言还允许开发者自定义数据类型(如:自定义类),Python也是一样。很多时候我们会有这样的需求: 把内存中的各种数据类型的数据通过网络传送给其它机器或客户端;把内存中的各种数据类型的数据保存到本地磁盘持久化; 2.

duzanuolu的专栏 705

python存文件的模块_保存数据到文件的模块(json,pickle,shelve,configparser,xml)_python

一、各模块的主要功能区别json模块:将数据对象从内存中完成序列化存储,但是不能对函数和类进行序列化,写入的格式是明文。 (与其他大多语言交互的类型)pickle模块:将数据对象从内存中完成序列化存储,可以能对函数进行序列化,写入的格式是二进制格式wb。 (支持python的所有数据类型,python特有的)configparser模块:保存字典内容到文件,并按照一定的格式写入文件保存。shel...

weixin_35048266的博客 447

详解Python的json,pinkle,shelve模块

如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON,因为JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。JSON不仅是标准格式,并且比XML更快,而且可以直接在Web页面中读取,非常方便。 ...

Zijian Su的博客 896

python之json & pickle & shelve模块

json & pickle & shelve模块 之前我们学习过用eval内置方法可以将一个字符串转成python对象,不过,eval方法是有局限性的,对于普通的数据类型,json.loads和eval都能用,但遇到特殊类型的时候,eval就不管用了,所以eval的重点还是通常用来执行一个字符串表达式,并返回表达式的值。 import json x="[null,true,false,1]" print(eval(x)) # 会报错 print(json.loads(x)) # 可以正常

Qiu先生的博客 159

python持久化存储模块(json,pickle等)

文章目录python持久化存储模块1.shelve模块导入模块增加、修改数据查询删除2.xml模块导入模块读取树获取根节点获取根节点标签遍历文档遍历一个节点修改节点信息删除node创建一个xml文档3.pickle模块导入模块dumpsloadsdump,load4.json模块dump,loaddumps,loads5.configparser5.0 模块示例5.0 配置文件示例5.1读读取文件...

小青头的博客 1323

json模块、pickle模块(序列化)shelve模块、xml模块

json模块、pickle模块(序列化)shelve模块、xml模块 json模块: json:与任何语言之间都可以进行信息交换(字符串的转换)    经过json转换,所有类型均可先转换为双引号形式 再转换为str 例如:文件的读写: 1 #写文件: 2 import json 3 f = open("demo.txt","w") 4 dic = {"name":"g_l"} 5 d...

g_l_xz的博客 284
上一篇: 初学者python笔记(os模块、sys模块)
下一篇: 初学者python笔记(re模块、正则表达式完全解析)
鸿蒙Next
鸿蒙Next 优质创作者: python技术领域 优质创作者: python技术领域
博客等级 码龄7年 2万+粉丝 300原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鸿蒙Next

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值