一.序列化

指:在我们存储数据的时候,需要对我们的对象进行处理,把对象处理成方便存储和传输的数据格式,这个就是序列化,

不同的序列化结果不同,但目的是一样的,都是为了存储和传输.

一,pickle.可以将我们python中的任意数据类型转化成bytes并写入到文件中.

同样也可以把文件中写好的bytes转换回我们的python的数据.这个过程被称为序列化

import pickle
class Cat:
def __init__(self, name, age):
self.name = name
self.age = age
def catchMouse(self):
print(self.name, "抓⽼⿏")
c = Cat("jerry", 18)
bs = pickle.dumps(c) # 序列化一个对象.
print(bs) # 一堆二进制. 看不懂
cc = pickle.loads(bs) # 把二进制反序列化成我们的对象
cc.catchMouse() # 猫依然是猫. 还可以抓老鼠
pickle中的dumps可以序列化一个对象. loads可以反序列化一个对象. 我们使用dump
还可以直接 把一个对象写入到文件中
# f = open("cat", mode="wb")
# pickle.dump(c, f) # 写到⽂件中
# f.close()
f = open("cat", mode="rb")
cc = pickle.load(f) # 从文件中读取对象
cc.catchMouse()

 pickle还⽀持多个对象的写出.

lst = [Cat("jerry", 19), Cat("tommy", 20), Cat("alpha", 21)]
f = open("cat", mode="wb")
for el in lst:
pickle.dump(el, f) # 写⼊到⽂件中
f.close()
f = open("cat", mode="rb")
for i in range(len(lst)):
cc = pickle.load(f) # 从⽂件中读取对象
cc.catchMouse()
lst = [c1, c2, c3]
f = open("cat.dat", mode="ab")
pickle.dump(lst, f) # 把对象写到文件中 f = open("cat.dat", mode="rb")
lst = pickle.load(f) # 读取第一次
for cc in lst:
cc.chi()
用户注册与登录
class User:
def __init__(self, username, password):
self.username = username
self.password = password class client:
def regist(self):
uname = input("please input your username:")
pwd = input("please input your password:")
user = User(uname, pwd)
pickle.dump(user, open("userinfo", mode="ab"))
print("regist successful!!!") def login(self):
uname = input("please input your username:")
pwd = input("please input your password:")
f = open("userinfo", mode="rb")
while 1:
try:
u = pickle.load(f) # 从文件里把对象拿出来
if u.username == uname and u.password == pwd:
print("login successful !!")
break except Exception as e:
print("login failed !!!")
break c = client()
# c.regist()
# c.regist()
# c.regist()
# c.regist()
c.login()

 三.shelve

shelve. 简单另类的一种序列化的方案. 有点⼉类似redis. 可以作为 一种小型的数据库来使用

shelve提供python的持久化操作就是把数据写到硬盘上. 在操作shelve的时候非常的像操作一个字典

import shelve
shelf = shelve.open("sylar")
# shelf["jay"] = "周杰伦"
print(shelf['jay'])
shelf.close()

 我们存储 ⼀些复杂的数据 

我们存储一些复杂的数据
s = shelve.open("sylar")
# s["jay"] = {"name":"周杰伦", "age":18, "hobby":"哄⼩孩"}
print(s['jay'])
s.close()
修改时注意需添加参数writeback=True
s = shelve.open("sylar", writeback=True)
s['jay']['name'] = "胡辣汤" # 尝试改变字典中的数据
s.close()
s = shelve.open("sylar")
print(s['jay']) # 改变了.
s.close() writeback=True可以动态的把我们修改的信息写入到文件中还可以删
除数据. 就像字典⼀样.
s = shelve.open("sylar", writeback=True)
del s['jay']
s.close() s = shelve.open("sylar")
print(s['jay']) # 报错了, 没有了
s.close() s = shelve.open("sylar", writeback=True)
s['jay'] = "周杰伦"
s['wlj'] = "王力宏"
s.close() s = shelve.open("sylar")
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()

 四. json(重点) 

概念  json. 将python中常用的字典, 列表转化成字符串. 是目前前后端数据交互使用频率 最高的一种数据格式.

json是我们前后端交互的枢纽. 相当于编程界的普通话. 大家沟通都用 json.因为json的语法格式可以完美的表示出一个对象.

json全 称javascript object notation. 翻译过来叫js对象

wf = {
"name":"汪峰",
"age":18,
"hobby":"上头条",
"wife":{
"name":'⼦怡',
"age":19,
"hobby":["唱歌", "跳舞", "演戏"]
}

  用xml写

<?xml version="1.0" encoding="utf-8" ?>
<wf>
<name>汪峰</name>
<age>18</age>
<hobby>上头条</hobby>
<wife>
<name>子怡</name>
<age>18</age>
<hobbies>
<hobby>唱歌</hobby>
<hobby>跳舞</hobby>
<hobby>演戏</hobby>
</hobbies>
</wife> </wf>

  json案例

import  json
例一
# 准备一个字典
dic = {"a": "小萝莉", "b": "大萝莉", "c": "猥琐大叔", "d": False, "e": None}
# python中可以直接把字典或者列表转化成json
s = json.dumps(dic, ensure_ascii=False) # pickle
print(type(s))
print(s)
例二
s = '{"a": "小萝莉", "b": "大萝莉", "c": "猥琐大叔", "d": false, "e": null}'
d = json.loads(s) # 把json转化成字典
print(d)
print(type(d)) 例三
dic = {"a": "小萝莉", "b": "大萝莉", "c": "猥琐大叔", "d": False, "e": None, "wf":{"name":"半壁江山", "hobby":"皮裤"}}
f = open("sylar.json", mode="w", encoding="utf-8")
json.dump(dic, f, ensure_ascii=False, indent=4) # 4个空格 = 1个tab f = open("sylar.json", mode="r", encoding="utf-8")
d = json.load(f)
print(d)
例四
class Person:
def __init__(self, firstName, lastName):
self.firstName = firstName
self.lastName = lastName s = '{"firstName": "尼古拉斯", "lastName": "刘能"}'
def func(dic):
return Person(dic['firstName'], dic["lastName"])
p = json.loads(s, object_hook=func) # 通过函数func把字典转换回对象
print(p.firstName, p.lastName)
p = Person("尼古拉斯", "刘能")
例五
#把对象转换成json
s = json.dumps(p.__dict__, ensure_ascii=False) # 方案一, 转的是字典
def func(obj):
return {
"firstName": obj.firstName,
"lastName": obj.lastName
}
s = json.dumps(p, default=func, ensure_ascii=False) # 方案二 转化的也是字典
print(s)
例六
dic1 = {"name":'毒液', "评分": "0.9"}
dic2 = {"name":'与神同行', "评分": "10"}
dic3 = {"name":'看不见的客人', "评分": "9.5"}
lst = [dic1, dic2, dic3]
f = open("movie.json", mode="w", encoding="utf-8")
for d in lst:
s = json.dumps(d, ensure_ascii=False)
f.write(s+"\n") f = open("movie.json", mode="r", encoding="utf-8")
dic1 = json.load(f) # 当json文件中保存多个json的时候不能一次性全部都读取出来
print(dic1) f = open("movie.json", mode="r", encoding="utf-8")
for line in f:
line = line.strip()
if line == "":
continue
else:
d = json.loads(line) # 一行一行的处理
print(d)

 五 configparser模块

该模块适⽤于配置⽂件的格式与windows ini文件类似,可以包含一个或多个节(section)每个节 可以有多个参数(键=值). 首先, 我们先看一个xxx服务器的配置文件

import configparser
config = configparser.ConfigParser() # 创建对象 config['DEFAULT'] = { # 特殊
"name":"腾讯qq木马",
"time":"qq更新时间",
"version":"1.0"
}
config['SERVER_1'] = {
"IP":"192.168.1.123",
"port":"12306"
}
config['SERVER_2'] = {
"IP":"192.168.1.178",
"port":"12311"
}
config['SERVER_3'] = {
"IP":"192.168.1.176",
"port":"12312"
} # 写入到文件
config.write(open("qq.ini", mode="w", encoding="utf-8")) # 读取内容
config = configparser.ConfigParser()
# 读取内容
config.read("qq.ini", encoding="utf-8") # 此时我们把文件中的内容读取到config
print(config['SERVER_1']['IP']) # 字典
print(config['SERVER_2']['name'])
print(config.get("SERVER_3", "IP")) # 字典 for k, v in config['DEFAULT'].items():
print(k, v) # config = configparser.ConfigParser()
# # 读取内容
# config.read("qq.ini", encoding="utf-8") # 此时我们把文件中的内容读取到config
# config['SERVER_1']['NAME'] = "哈哈哈"
# config.write(open("qq.ini", mode="w", encoding="utf-8"))

 

# 先读取. 然后修改. 最后写回文件
config = configparser.ConfigParser()
config.read("db.ini") # 读取文件
# 添加一个章节
# config.add_section("189-DB")
# config["189-DB"] = {
# "db_ip": "167.76.22.189",
# "port": "3306",
# "u_name": "root",
# "u_pwd": "123456"
# }
# 修改信息
config.set("168-DB", "db_ip", "10.10.10.168")
# 删除章节
config.remove_section("173-DB")
# 删除元素信息
config.remove_option("168-DB", "u_name")
# 写回文件
config.write(open("db.ini", mode="w"))

  

python中常用的模块二的更多相关文章

  1. python中常用的模块的总结

    1. 模块和包 a.定义: 模块用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能),本质就是.py结尾的python文件.(例如:文件名:test.py,对应的模块名:test) ...

  2. python中常用的模块一

    一,常用的模块 模块就是我们将装有特定功能的代码进行归类,从代码编写的单位来看我们的程序,从小到大的顺序: 一条代码<语句块,<代码块(函数,类)<模块我们所写的所有py文件都是模块 ...

  3. Python中常用的模块

    模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...

  4. 常用正则表达式与python中的re模块

    正则表达式是一种通用的字符串匹配技术,不会因为编程语言不一样而发生变化. 部分常用正则表达式规则介绍: . 匹配任意的一个字符串,除了\n * 匹配任意字符串0次或者任意次 \w 匹配字母.数字.下划 ...

  5. 【转】python 历险记(四)— python 中常用的 json 操作

    [转]python 历险记(四)— python 中常用的 json 操作 目录 引言 基础知识 什么是 JSON? JSON 的语法 JSON 对象有哪些特点? JSON 数组有哪些特点? 什么是编 ...

  6. python中常用的九种数据预处理方法分享

    Spyder   Ctrl + 4/5: 块注释/块反注释 本文总结的是我们大家在python中常见的数据预处理方法,以下通过sklearn的preprocessing模块来介绍; 1. 标准化(St ...

  7. Python中的单元测试模块Unittest快速入门

    前言 为什么需要单元测试? 如果没有单元测试,我们会遇到这种情况:已有的健康运行的代码在经过改动之后,我们无法得知改动之后是否引入了Bug.如果有单元测试的话,只要单元测试全部通过,我们就可以保证没有 ...

  8. python中常用的九种预处理方法

    本文总结的是我们大家在python中常见的数据预处理方法,以下通过sklearn的preprocessing模块来介绍; 1. 标准化(Standardization or Mean Removal ...

  9. python中常用的导包的方法和常用的库

    python中常用的导包的方法               导入包和包名的方法:1.import package.module 2.from package.module import  * 例一: ...

随机推荐

  1. shell命令行快捷键

    ctrl+a[A]:将光标移到命令行开头 ctrl+e[E]:将光标移到命令行结尾 ctrl+c[C]:强制终止命令执行 ctrl+u[U]:删除/剪切光标之前的所有字符 ctrl+y[Y]:粘贴ct ...

  2. NFS服务端与客户端配置

    #首先确认系统中是否安装了对于的软件 rpm -qa|grep -i nfs #在有网络的情况下使用YUM安装NFS.rpcbind软件包 yum install lrzsz nmap tree do ...

  3. gets函数

    gets函数    gets函数从标准输入读取一行文本并把它存储在作为参数传递给它的数组中    一行输入由一串字符组成,以一个换行符(newline)结尾    gets函数丢弃换行符,并在该行的末 ...

  4. 计算概论(A)/基础编程练习1(8题)/2:苹果和虫子

    #include<stdio.h> #include<math.h> int main() { /* n个苹果 每x小时能吃掉一个苹果 经过y小时 */ float n, x, ...

  5. ES6知识整理(6)--Symbol函数

    (文章会同步到博客园,技术类文章还是该让搜索引擎察觉比较好) symbol是js的第7种数据类型: 7种分别是:undefined.null.boolean(布尔).string(字符串).numbe ...

  6. Linux的简单介绍.

    Linux操作系统概述: Linux是基于Unix的开源免费的操作系统,由于系统的稳定性和安全性几乎成为程序代码运行的最佳系统环境.Linux是由Linux Torvalds(林纳斯·托瓦兹)起初开发 ...

  7. EDK II之USB主控制器(EHCI)驱动的实现框架

    本文简要介绍一下UEFI中EHCI驱动的代码实现框架: 下图是HCDI: 上图是Host驱动程序向上层驱动提供的接口图: 1.大部分接口的最后动作都是去操作主控制器寄存器,ECHI的spec:< ...

  8. leetcode [34] Find First and Last Position of Element in Sorted Array

    Given an array of integers nums sorted in ascending order, find the starting and ending position of ...

  9. Golang操作结构体、Map转化为JSON

    结构体生成Json package main import ( "encoding/json" "fmt" ) type IT struct { Company ...

  10. js输出

    JavaScript 可以通过4种不同的方式在html页面输出数据 1.使用window.alert() 弹出警告框,由于window为js的内置类,可简写为alter() <script> ...