主要内容:

  • 什么是序列化
  • 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. SpringBoot使用Spring Initializer

    IDE都支持使用Spring的项目创建Spring的项目创建向导,快速创建一个SpringBoot项目:选择我们需要的模块:向导会联网创建SpringBoot项目:默认生成的SpringBoot项目: ...

  2. mac navicate 2013 - Lost connection to MySQL server at 'reading initial communication packet

    mac 本地mysql用navicate打开表时遇到如下错误: 2013 - Lost connection to MySQL server at 'reading initial communica ...

  3. spoj705

    题解: 后缀数组求出height 然后ans=所有串-所有height 代码: #include<bits/stdc++.h> using namespace std; ; int t,a ...

  4. [转载]springmvc学习之@ModelAttribute运用详解

    spring学习之@ModelAttribute运用详解 链接

  5. vue-router-9-HTML5 History 模式

    vue-router 默认 hash 模式,页面不会重新加载 用路由的 history 模式,利用 history.pushState API 来完成 URL 跳转而无须重新加载页面. const r ...

  6. debian系统下安装ssh

    SSH 为 Secure Shell 的缩写,SSH 为建立在应用层基础上的安全协议.SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议.利用 SSH 协议可以有效防止远程管理过程中 ...

  7. 第三篇 功能实现(2) (Android学习笔记)

    第三篇 功能实现(2) ●Activity的四种启动模式 Activity的启动模式有四种,分别是standard.singleTop.singleTask和singleInstance. 在Andr ...

  8. ftp上传操作

    采用 :FtpWebRequest 进行操作ftp. 1.代码上传文件必须是被动模式  UsePassive=false 2.最好采用二进制传输 UseBinary=true 注意缓冲区大小,还有注意 ...

  9. 异常 No module named 'numpy.core._multiarray_umath

    No module named 'numpy.core._multiarray_umath 解决方法: 1. 可能是由于模型保存时出错,导致模型没有保存成功,此时删掉保存的模型即可 2. numpy版 ...

  10. UNITY3d在移动设备上的一些优化实战

    项目进入了中期之后,就需要对程序在移动设备上的表现做分析评估和针对性的优化了,首先前期做优化,很多瓶颈没表现出来,能做的东西不多,而且很多指标会凭预想,如果太后期做优化又会太晚,到时发现一些问题改起来 ...