主要内容:

  • 什么是序列化
  • 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的更多相关文章

  1. Python模块之常用模块,反射以及正则表达式

    常用模块  1. OS模块 用于提供系统级别的操作,系统目录,文件,路径,环境变量等 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("di ...

  2. day--6_python常用模块

    常用模块: time和datetime shutil模块 radom string shelve模块 xml处理 configparser处理 hashlib subprocess logging模块 ...

  3. Saltstack常用模块及API

    Saltstack提供了非常丰富的功能模块,涉及操作系统的基础功能.常用工具支持等,更多模块信息可以查看官网模块介绍.也可以通过sys模块列出当前版本支持的模块. salt '*' sys.list_ ...

  4. Python学习笔记-常用模块

    1.python模块 如果你退出 Python 解释器并重新进入,你做的任何定义(变量和方法)都会丢失.因此,如果你想要编写一些更大的程序,为准备解释器输入使用一个文本编辑器会更好,并以那个文件替代作 ...

  5. Day05 - Python 常用模块

    1. 模块简介 模块就是一个保存了 Python 代码的文件.模块能定义函数,类和变量.模块里也能包含可执行的代码. 模块也是 Python 对象,具有随机的名字属性用来绑定或引用. 下例是个简单的模 ...

  6. 第六章:Python基础の反射与常用模块解密

    本课主题 反射 Mapping 介绍和操作实战 模块介绍和操作实战 random 模块 time 和 datetime 模块 logging 模块 sys 模块 os 模块 hashlib 模块 re ...

  7. 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 ...

  8. Ansible安装部署以及常用模块详解

    一.  Ansible 介绍Ansible是一个配置管理系统configuration management system, python 语言是运维人员必须会的语言, ansible 是一个基于py ...

  9. Python 入门基础14 --time、os、random、json、pickle 常用模块1

    今日内容: 一.常用模块 2019.04.10 更新 1.time:时间 2.calendar:日历 3.datetime:可以运算的时间 4.sys:系统 5.os:操作系统 6.os.path:系 ...

随机推荐

  1. h5的坑

    转自 http://www.mahaixiang.cn 解决各种坑 http://www.mahaixiang.cn/ydseo/1529.html

  2. Oracle 如何循环查询结果集,进行新增或修改

    Oracle的PL/SQL中怎样循环查询的结果集,然后根据查询结果进行判断,是新增或修改操作 loop循环例子 for item in (select a,b,c from table_a where ...

  3. linux下find和grep命令详解

    在linux下面工作,有些命令能够大大提高效率.本文就向大家介绍find.grep命令,他哥俩可以算是必会的linux命令,我几乎每天都要用到他们.本文结构如下: find命令 find命令的一般形式 ...

  4. 【框架】selenium运行失败后自动截图(三)

    思路: 1.写一个类继承TestListenerAdapter,覆写onTestFailure()方法 2.在onTestFailure方法里,调用selenium的TakesScreenShot的g ...

  5. Jenkins结合testng注意事项

    1.在生成测试报告时,因为Jenkins自带的只有Junit的测试报告,不会显示testng的. 2.要想显示Publish TestNG Results这一项,首先需要在jenkins的首页-系统管 ...

  6. Win10系列:VC++调用自定义组件1

    通过20.9.1小节中的代码和步骤编写了一个名为"FilePickerComponent"的WinRT组件,接下来将在上一小节所新建的项目基础上,继续介绍如何在不同的语言所编写的应 ...

  7. PyCharm进行远程开发和调试linux服务器

    简介: 或许我也应该迁移到linux环境去开发. 最近写的一些小东西,在wnidows上开发,在windows上调试,都很正常.可是一旦放进linux服务器,就歇菜了. 那么我们有什么办法处理这个wi ...

  8. 福大软工1816 · 第三次作业 - 结对项目Salty Fish原型图

    SALTY FISH原型图 LINKS IMPORT to LIST FOCUS TRENDS ANALYSE NIGHT

  9. SQL-34 对于表actor批量插入如下数据

    题目描述 对于表actor批量插入如下数据CREATE TABLE IF NOT EXISTS actor (actor_id smallint(5) NOT NULL PRIMARY KEY,fir ...

  10. 使用MyEclipse开发Java EE应用:用XDoclet创建EJB 2 Session Bean项目(三)

    MyEclipse限时秒杀!活动火热开启中>> [MyEclipse最新版下载] 三.配置XDoclet支持的项目 默认情况下,MyEclipse EJB项目未配置使用XDoclet功能. ...