主要内容:

  • 什么是序列化
  • 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. GsonFormat根据返回值json快速构建Model

    Json是一个插件,我们只需要在Android studio中进行安装一下,即可使用. 根据平时的操作,根据浏览器中返回中的数据一行一行敲,其实这样非常麻烦. 有一个简单的方法,可以瞬间生成一个实体类 ...

  2. zabbix3.4.7触发器表达式详解

    zabbix触发器表达式详解 概述:触发器中的表达式使用很灵活,我们可以创建一个复杂的逻辑测试监控,触发器表达式形式如下: {<server>:<key>.<functi ...

  3. Win10系列:C#应用控件基础3

    CheckBox控件 在应用程序的开发过程中开发者经常使用一组CheckBox控件来显示多个复选框,让用户从中选择一个或多个.当用户勾选复选框后,被选中的复选框会被标记为勾选状态,再次点击此复选框可取 ...

  4. log4j不输出日志的解决方案

    参考:http://blog.csdn.net/qq994406030/article/details/53433159 主要是log4j.properties log权限和log输出方式没配好.

  5. JDBC连接数据库:单线程、多线程、批处理插入数据的对比

    一.单线程(单条循环)插入50000条记录: 每执行一次就要访问一次数据库 import java.sql.Connection; import java.sql.DriverManager; imp ...

  6. hdu 1754解题报告 (代码+注释)

      I Hate It Time Limit: 3000MS     Memory Limit: 32768 K Problem Description 很多学校流行一种比较的习惯.老师们很喜欢询问, ...

  7. [leetcode整理]

    =======简单 leetcode164 Maximum Gap sort两次 =======有参考 330 Patching Array 98 Validate Binary Search Tre ...

  8. 运算类实现 及 GNU Makefile基本结构

    1.运算类的实现,代码如下:  (1)operator.cpp #include<iostream> #include "operator.h" using names ...

  9. 打开和写入word文档

    一. 使用win32读取word内容 # -*- coding: utf-8 -*- from win32com import client as wc def readDocx2(): word = ...

  10. MicroBlaze核的串行接口实验:SPI UART

    reference : https://blog.csdn.net/weixin_42413559/article/details/80720566 串行接口:SPI UART XPS->SDK ...