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:系 ...
随机推荐
- h5的坑
转自 http://www.mahaixiang.cn 解决各种坑 http://www.mahaixiang.cn/ydseo/1529.html
- Oracle 如何循环查询结果集,进行新增或修改
Oracle的PL/SQL中怎样循环查询的结果集,然后根据查询结果进行判断,是新增或修改操作 loop循环例子 for item in (select a,b,c from table_a where ...
- linux下find和grep命令详解
在linux下面工作,有些命令能够大大提高效率.本文就向大家介绍find.grep命令,他哥俩可以算是必会的linux命令,我几乎每天都要用到他们.本文结构如下: find命令 find命令的一般形式 ...
- 【框架】selenium运行失败后自动截图(三)
思路: 1.写一个类继承TestListenerAdapter,覆写onTestFailure()方法 2.在onTestFailure方法里,调用selenium的TakesScreenShot的g ...
- Jenkins结合testng注意事项
1.在生成测试报告时,因为Jenkins自带的只有Junit的测试报告,不会显示testng的. 2.要想显示Publish TestNG Results这一项,首先需要在jenkins的首页-系统管 ...
- Win10系列:VC++调用自定义组件1
通过20.9.1小节中的代码和步骤编写了一个名为"FilePickerComponent"的WinRT组件,接下来将在上一小节所新建的项目基础上,继续介绍如何在不同的语言所编写的应 ...
- PyCharm进行远程开发和调试linux服务器
简介: 或许我也应该迁移到linux环境去开发. 最近写的一些小东西,在wnidows上开发,在windows上调试,都很正常.可是一旦放进linux服务器,就歇菜了. 那么我们有什么办法处理这个wi ...
- 福大软工1816 · 第三次作业 - 结对项目Salty Fish原型图
SALTY FISH原型图 LINKS IMPORT to LIST FOCUS TRENDS ANALYSE NIGHT
- SQL-34 对于表actor批量插入如下数据
题目描述 对于表actor批量插入如下数据CREATE TABLE IF NOT EXISTS actor (actor_id smallint(5) NOT NULL PRIMARY KEY,fir ...
- 使用MyEclipse开发Java EE应用:用XDoclet创建EJB 2 Session Bean项目(三)
MyEclipse限时秒杀!活动火热开启中>> [MyEclipse最新版下载] 三.配置XDoclet支持的项目 默认情况下,MyEclipse EJB项目未配置使用XDoclet功能. ...