day 020 常用模块02
主要内容:
- 什么是序列化
- pickle
- shelve
- json
- configparser(模块)
一 序列化
我们在存储数据或者网络传输数据的时候,需要对我们的对象进行处理,把对象处理成方便存储和
传输的数据格式,这个就叫序列化 python中序列化有三种方案:
1 pickle
2 sheelve
3 json :
二 pickle ( 可以将我们python中的任意数据类型转化成bytes并写入到⽂文件中. 同样也 可以把⽂文件中写好的bytes转换回我们python的数据. 这个过程被称为反序列列化 )
这需要记住这四个东西:
dumps 序列化。 把对象转化成bytes
loads 反序列化。 把bytes转化成对
dump 序列化。 把对象转化成bytes并写入文件
load 反序列化。把文件中的bytes读取。转化成对象
序列化 :
import pickle
class Cat:
def __init__(self,name,age):
self.name=name
self.age=age
def catchMouse(self):
print(self.name,self.age,"吃饭")
c=Cat("阿萨德",'')
# c.catchMouse() # # dumps 把对象转化成bytes 序列化
ab=pickle.dumps(c) # 序列化一个对象
print(ab) # 看不懂的二进制 # 把bytes 转换回对象 反序列化
a=pickle.loads(ab) #把二进制反序列列化成我们的对
a.catchMouse() # 猫依然是猫. 依然可以吃饭 阿萨德 吃饭
怎么写入文件:
dump 序列化。 把对象转化成bytes并写入文件
# load 反序列化。把文件中的bytes读取。转化成对象 还用的上边那个对象
# c=Cat("阿萨德",'')
# f = open("pickle-text", mode="wb") # 写入文件
# pickle.dump(c,f) # 看不懂的 # f = open("pickle-text", mode="rb") # 读取 文件
# a=pickle.load(f) #反序列化
# a.catchMouse() # 看得懂的 支持多个对象写出:
lst = [Cat("猫1", ), Cat("猫2", ), Cat("猫3", ), Cat("猫4", ), Cat("猫5",)] # f = open("pickle-text", mode="wb")
# # a= pickle.dump(lst,f) # 这么写文件里乱
# for el in lst:
# pickle.dump(el, f) # 这么写清楚
# f.flush()
# f.close() f = open("pickle-text", mode="rb")
while :
try:
c = pickle.load(f)
c.catchMouse() # 结果为 猫1", 10 吃饭 至猫5
except EOFError: break
但是这样写并不够好. 因为读的时候. 并不能知道有多少对象要读. 这⾥里里记住, 不能⼀一⾏行行行行的读. 那真的要写入或者读取多个内容怎么办? 很简单. 装list⾥里里. 然后读取和写入都⽤用 list
# lst = [Cat("jerry", ), Cat("tommy", ), Cat("alpha", )]
#
# # f=open("pickle-text",mode="wb")
# # pickle.dump(lst,f)
#
# f=open("pickle-text",mode="rb")
# l1=pickle.load(f)
# for el in l1:
# el.catchMouse() # 结果 为 jerry 19 吃饭
tommy 20 吃饭
alpha 21 吃饭
三 shelve (简单另类的一种序列化的方案. 有点儿类似后面我们学到的redis. 可以作为 一种小型的数据库来使⽤) 就是把数据写到硬盘上,在操作shelve的时候就像操作一个字典.
import shelve
shelf=shelve.open("asd")
shelf["jad"]="Lisa"
print(shelf['jad'])
shelf.close()
s = shelve.open("asd")
s["jay"] = {"name":"周杰伦", "age":, "hobby":"哄小孩"}
print(s['jay'])
s.close()
s = shelve.open("asd", writeback=True) # 这个鬼东西可以帮我们动态改变信息并写到文件中
# 这个鬼东西换可以帮我们删除数据 就像字典一样
s['jay']['name'] = "胡辣汤" # 尝试改变字典中的数据
s.close()
s = shelve.open("asd")
print(s['jay']) # 改变了
s.close()
s = shelve.open("asd")
# for k in s: # 像字典一样遍历
# print(k)
# print(s.keys()) # 拿到所有key的集合
for k in s.keys():
print(k)
for k, v in s.items(): # 像字典⼀样操作
print(k, v)
s.close()
综上shelve就当成字典来用就⾏
四 json( 将python中常见的字典, 列表转化成字符串. 是目前后端数据交互使用频率 最高的一种数据格式.)全称 javascript object notatio
# dic={"a":'女王','b':';萝莉','c':'小清新'}
# s=json.dumps(dic,ensure_ascii=False) # 把 字典转化成json字符串
# print(s,type(s))
# ensure_ascii=False 这个鬼东西可以处理中文
#
# s = '{"a": "女王", "b": "萝莉", "c": "小清新"}'
# dic=json.loads(s) # \把前端传递过来的json字符串转化成字典
# print(dic,type(dic))
# json也可以像pickle一样吧序列化的结果写到文件中
# dic = {"a": "女王", "b": "萝莉", "c": "小清新"}
# f=open('text.json',mode='w',encoding="utf-8") # 把对象打散成json写到文件中
# json.dump(dic,f,ensure_ascii=False)
# f.close()
#读取 文件中的json
# f=open('text.json',mode='r',encoding="utf-8")
# dic=json.load(f) # 读取json里的对象
# f.close()
# print(dic)
我们可以向同⼀个文件中写入多个json串
写入的时候
# . 循环
# . 用dumps把字典转化成字符串, 然后手工在后面加一个\n
# . 写出
# f = open("new_menu.json", mode="w", encoding="utf-8")
# lst = [{"a": "胡辣汤"},{"b":"吱吱冒油的大猪蹄子"},{"c": "盖浇饭"},{"d":"马拉"},{"e":"法国大蜗牛"}]
# for el in lst:
# s = json.dumps(el, ensure_ascii=False) + "\n"
# f.write(s)
#
# f.flush()
# f.close() # 读取的时候
# . for line in f:
# . strip()去掉空白
# . loads()变成字典 # f = open("new_menu.json", mode="r", encoding="utf-8")
# for line in f:
# line = line.strip()
# dic = json.loads(line)
# print(dic)
五 configparser
ConfigParser模块在python中是用来读取配置文件,配置文件的格式跟windows下的ini配置文件相似,可以包含一个或多个节(section),每个节可以有多个参数(键=值)。使用的配置文件的好处就是不用再程序中硬编码,可以是你的程序变得灵活起来。
注意:在python 3 中ConfigParser模块名已更名为configparser
函数
读取配置文件:
- read(filename) 直接读取ini文件内容
- sections() 得到所有的section,并以列表的形式返回
- options(section) 得到该section的所有option
- items(section) 得到该section的所有键值对
- get(section,option) 得到section中option的值,返回为string类型
- getint(section,option) 得到section中option的值,返回为int类型
- getfloat(section,option)得到section中option的值,返回为float类型
- getboolean(section, option)得到section中option的值,返回为boolean类型
写入配置文件
- add_section(section) 添加一个新的section
- has_section(section) 判断是否有section
- set( section, option, value) 对section中的option进行设置
- remove_setion(section)删除一个section
- remove_option(section, option)删除section中的option
- write(fileobject)将内容写入配置文件。
day 020 常用模块02的更多相关文章
- Python模块之常用模块,反射以及正则表达式
常用模块 1. OS模块 用于提供系统级别的操作,系统目录,文件,路径,环境变量等 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("di ...
- day--6_python常用模块
常用模块: time和datetime shutil模块 radom string shelve模块 xml处理 configparser处理 hashlib subprocess logging模块 ...
- Saltstack常用模块及API
Saltstack提供了非常丰富的功能模块,涉及操作系统的基础功能.常用工具支持等,更多模块信息可以查看官网模块介绍.也可以通过sys模块列出当前版本支持的模块. salt '*' sys.list_ ...
- Python学习笔记-常用模块
1.python模块 如果你退出 Python 解释器并重新进入,你做的任何定义(变量和方法)都会丢失.因此,如果你想要编写一些更大的程序,为准备解释器输入使用一个文本编辑器会更好,并以那个文件替代作 ...
- Day05 - Python 常用模块
1. 模块简介 模块就是一个保存了 Python 代码的文件.模块能定义函数,类和变量.模块里也能包含可执行的代码. 模块也是 Python 对象,具有随机的名字属性用来绑定或引用. 下例是个简单的模 ...
- 第六章:Python基础の反射与常用模块解密
本课主题 反射 Mapping 介绍和操作实战 模块介绍和操作实战 random 模块 time 和 datetime 模块 logging 模块 sys 模块 os 模块 hashlib 模块 re ...
- Ansible运维自动化工具19个常用模块使用实例【转】
一.模块列表 1.setup 2.ping 3.file 4.copy 5.command 6.shell 7.script 8.cron 9.yum 10.service 11.group 12.u ...
- Ansible安装部署以及常用模块详解
一. Ansible 介绍Ansible是一个配置管理系统configuration management system, python 语言是运维人员必须会的语言, ansible 是一个基于py ...
- Python 入门基础14 --time、os、random、json、pickle 常用模块1
今日内容: 一.常用模块 2019.04.10 更新 1.time:时间 2.calendar:日历 3.datetime:可以运算的时间 4.sys:系统 5.os:操作系统 6.os.path:系 ...
随机推荐
- prefix super supra sex sept septi out~2
1★ super 2★ supra 超过,超出 3★ sept 4★ septi 7 5★ sex 6
- vs2015 出现Lc.exe 已退出,代码为-1的问题,如何解决
今天在代码运行时,出现lc.exe已退出,代码为-1 的问题
- 【2】IOS APP打包发布
目的: 本文的目的是对IOS APP打包发布做了对应的介绍,大家可根据文档步骤进行mac环境部署: 申请苹果开发者账号 此处略 创建申请证书 这样做的目的就是为你的电脑安装发布许可证,只有这样你的电脑 ...
- java 实现简单循环队列
package www.queue; import java.util.Arrays; /** * 循环队列: * 循环队列的出现是为了解决顺序队列出队列后,首指针向后移动后前面的存储过程浪费不能使用 ...
- java关于集合的遍历与增强for循环(foreach)的使用
java集合类的使用可以说是无处不在,总的我们可以将之分为三大块,分别是从Collection接口延伸出的List.Set和以键值对形式作存储的Map类型集合. 许多情况需要我们遍历出集合 ...
- DevExpress v18.1新版亮点——XAF篇(一)
用户界面套包DevExpress v18.1日前正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了DevExpress eXpressApp Framework(XAF) v18.1 ...
- 记录搭建ssm项目
搞java也快3年了,搭建一个ssm居然有点吃力. 参考链接:https://blog.csdn.net/gebitan505/article/details/44455235/ 环境准备:jdk8. ...
- Linux文件系统命令 umask
命令:umask 功能:指定创建文件或者文件夹的时,默认的权限设置 用法:umask -S:以rwx的方式查看创建文件的权限 umask -p:以补位的方式查看文件的权限,显示的是补位的十进制. 另外 ...
- Linux文件系统命令 cp
命令名:cp 功能:拷贝文件,把一个文件的内容拷贝到另外一个文件中去. eg: cp source_file dist_file renjg@renjg-HP-Compaq-Pro--MT:~$ cp ...
- L256 翻译
Should work be placed among the causes of happiness or be regarded as a burden? Much work isexceedin ...