1. 序列化
把对象打散成bytes或者字符串。 方便存储和传输 序列化
把bytes或者字符串转换回对象。 反序列化 2. pickle(比较重要)
把python中所有的对象都可以转化成bytes。进行存储和传输
dumps() 序列化。 写在内存中,不写文件.
loads() 反序列化, 从内存中读,不读文件.
dump()
load()
# dumps()序列化, loads() 反序列化

import pickle

#  dumps 序列化。 把对象转化成bytes
# loads 反序列化。 把bytes转化成对象
# dump 序列化。 把对象转化成bytes并写入文件
# load 反序列化。把文件中的bytes读取。转化成对象 class Cat:
def __init__(self, name, age):
self.name = name
self.age = age def catchMouse(self):
print(self.name, self.age, "抓老鼠") c = Cat("jerry", 18)
c.catchMouse() # dumps 把对象转化成bytes 序列化
bs = pickle.dumps(c)
print(bs) # 把bytes 转换回对象 反序列化
ccc = pickle.loads(bs)
ccc.catchMouse()
dic = {"jay": "周杰伦", "jj": "大阳哥"}
bs = pickle.dumps(dic)
print(bs) d = pickle.loads(bs)
print(d)

dumps()& loads()

# dump()序列化写入文件, load()序列化从文件读取

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("jerry", 18)
f = open("pickle-test", mode="wb")
pickle.dump(c, f) # 结果人是看不了的。 f.close()
f = open("pickle-test", mode="rb")
c = pickle.load(f)
c.catchMouse()
f.close()
import pickle
class Cat:
def __init__(self, name, age):
self.name = name
self.age = age lst = [Cat('猫1', 10), Cat('猫2', 9), Cat('猫3', 0), Cat('猫4', 7), Cat('猫5', 6)]
f = open('pickle-test', mode='wb')
for el in lst:
pickle.dump(el, f) f.flush()
f.close()
f = open('pickle-test', mode='rb') while 1:
try:
c = pickle.load(f) # 迭代着拿
print(c.name)
except EOFError:
break
import pickle
class Cat:
def __init__(self, name, age):
self.name = name
self.age = age lst = [Cat('猫1', 10), Cat('猫2', 9), Cat('猫3', 0), Cat('猫4', 7), Cat('猫5', 6)]
# f = open('pickle-test', mode='wb')
# pickle.dump(lst, f) # 知道列表长度不是很长,可以直接装进去 f = open('pickle-test', mode='rb')
lst1 = pickle.load(f)
for i in range(0, len(lst1)):
print(lst1[i].name) f.close()
3. shelve
小型数据库. 操纵的是文件类型的字典.
shelve.open(文件, writeback=True)
import shelve
# 打开一个文件
f = shelve.open('阿拉斯加', writeback=True)
f['jj'] = '林俊杰' # f = {} # 像字典一样操作
f['jay'] = '周杰伦' print(f['jay']) f['jay'] = {'name': '周杰伦', 'age': 18, 'hobby': '唱歌'} # 如果不加writeback=True则只能在内存层面修改,不能修改文件
print(f['jay'])
f['jay']['name'] = '风火轮'
print(f['jay'])
f.close()
# 像字典一样使用
import shelve
f = shelve.open('阿拉斯加')
print(f.keys())
for k in f.keys():
print(k) for k in f:
print(k) for k, v in f.items():
print(k, v) f.close()
4. json(重点)
前后端数据交互的通用的数据格式。
dumps() 把字典转化成字符串
loads() 把字符转化成字典
   dump(s, f) 在写入文件的时候, 必须用双引号 "", 不能识别单引号''
load(f) 处理中文
ensure_ascii = False
import json
dic = {'a': '李茶的姑妈', 'b': '巨齿鲨', 'c': '看不见的客人'}
s = json.dumps(dic) # 如果你的key或者value超出了ascii范畴。 就会显示成\uxxxxx
print(s)
s1 = json.dumps(dic, ensure_ascii=False) # 干掉ascii码
print(s1)
print(repr(s1), type(s)) # 使用repr便于区分s1的类型是字典还是字符串 # 把字符串解析成 字典
dic1 = json.loads(s)
dic2 = json.loads(s1)
print(dic1, type(dic1))
print(dic2, type(dic2))
# json.dump() 和 json.load()

import json
# 写入
dic = {"a": '李茶的姑妈', "b": "找到你", "c": "看不见的客人"}
f = open('waimai.json', mode='w', encoding='utf-8')
json.dump(dic, f, ensure_ascii=False)      # 缺点: 放入字典时不会换行
f.close() # 读出
f = open('waimai.json', mode='r', encoding='utf-8')
s = json.load(f) # 把文件中的json串读取成字典
print(s, type(s))
f.close()
import json
lst = [{"a": "胡辣汤"},{"b":"吱吱冒油的大猪蹄子"},{"c": "盖浇饭"},{"d":"马拉"},{"e":"法国大蜗牛"}]
f = open("menu.json", mode="w", encoding="utf-8")
for dic in lst:
json.dump(dic, f, ensure_ascii=False)
f.close() f = open("menu.json", mode="r", encoding="utf-8")
s = json.load(f)
print(s) # 报错 json.dump()不能换行, 所以json只建议使用dumps & loads()
# 写入的时候
# 1. 循环
# 2. 用dumps把字典转化成字符串, 然后手工在后面加一个\n
# 3. 写出
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() # 读取的时候
# 1. for line in f:
# 2. strip()去掉空白
# 3. loads()变成字典 f = open("new_menu.json", mode="r", encoding="utf-8")
for line in f:
line = line.strip()
dic = json.loads(line)
print(dic)
5. configparser
处理配置文件的。
把配置文件作为一个大字典来处理就型了
import configparser

conf = configparser.ConfigParser()
conf["DEFAULT"] = {
"session-time-out": 30,
"user-alive": 60,
"connect-alive": 10
} conf["189-DB"] = {
"ip": "189.135.63.12",
"port": 3306,
"uname": "root",
"password": "root"
} conf["166-DB"] = {
"ip": "189.135.63.12",
"port": 3306,
"uname": "root",
"password": "root"
} conf["163-DB"] = {
"ip": "189.135.63.12",
"port": 3306,
"uname": "root",
"password": "root"
} f = open("db.ini", mode="w")
conf.write(f) # 把文件扔进去。 写到这个文件里 f.close()
import configparser

# 读取内容
conf = configparser.ConfigParser()
conf.read("db.ini")
print(conf.sections()) # 获取到章节 keys()
print(conf['166-DB']["ip"]) # 可以像字典一样操作
print(conf["166-DB"]["port"])
print(conf["166-DB"]["uname"])
print(conf["166-DB"]["password"]) for key in conf['163-DB']:
print(key) for key, value in conf['163-DB'].items():
print(key, value)
import configparser

# 增删改操作
conf = configparser.ConfigParser()
conf.read("db.ini") # 读取出来 conf['163-DB']['uname'] = "alex"
# del conf['163-DB']["password"]
conf.set("163-DB", "wangermazi", "") # setattr conf.add_section("jay")
conf.write(open("db.ini", mode="w"))

Day23--Python--常用模块02--序列化,configparser的更多相关文章

  1. Python 常用模块(2) 序列化(pickle,shelve,json,configpaser)

    主要内容: 一. 序列化概述 二. pickle模块 三. shelve模块 四. json模块(重点!) 五. configpaser模块 一. 序列化概述1. 序列化: 将字典,列表等内容转换成一 ...

  2. python常用模块补充hashlib configparser logging,subprocess模块

    一.hashlib模板 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定 ...

  3. python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib subprocess logging re正则

    python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib  subprocess ...

  4. Python模块02/序列化/os模块/sys模块/haslib加密/collections

    Python模块02/序列化/os模块/sys模块/haslib加密/collections 内容大纲 1.序列化 2.os模块 3.sys模块 4.haslib加密 5.collections 1. ...

  5. python常用模块-配置文档模块(configparser)

    python常用模块-配置文档模块(configparser) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. ConfigParser模块用于生成和修改常见配置文档,当前模块的名称 ...

  6. python常用模块之configparser模块

    python常用模块之configparser 作用:解析配置文件 假设在当前目录下有这样一个conf.ini文件 [DEFAULT] ServerAliveInterval = 45 Compres ...

  7. (转)python常用模块(模块和包的解释,time模块,sys模块,random模块,os模块,json和pickle序列化模块)

    阅读目录 1.1.1导入模块 1.1.2__name__ 1.1模块 什么是模块: 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代 ...

  8. python常用模块集合

    python常用模块集合 Python自定义模块 python collections模块/系列 Python 常用模块-json/pickle序列化/反序列化 python 常用模块os系统接口 p ...

  9. python——常用模块2

    python--常用模块2 1 logging模块 1.1 函数式简单配置 import logging logging.debug("debug message") loggin ...

  10. Python常用模块——目录

    Python常用模块学习 Python模块和包 Python常用模块time & datetime &random 模块 Python常用模块os & sys & sh ...

随机推荐

  1. linux pstree命令

    pstree命令可以使进程以tree的形式显示 pstree -ssystemd─┬─UVPHostd───6*[{UVPHostd}] ├─acpid ├─2*[agetty] ├─crond ├─ ...

  2. 莫烦sklearn学习自修第七天【交叉验证】

    1. 什么是交叉验证 所谓交叉验证指的是将样本分为两组,一组为训练样本,一组为测试样本:对于哪些数据分为训练样本,哪些数据分为测试样本,进行多次拆分,每次将整个样本进行不同的拆分,对这些不同的拆分每个 ...

  3. python数据结构与算法第十天【插入排序】

    1.插入排序的原理 2.代码实现 def insert_sort(alist): # 从第二个位置,即下标为1的元素开始向前插入 for i in range(1, len(alist)): # 从第 ...

  4. 移动APP用例设计中的关键点(转载)

    http://www.51testing.com/html/52/n-4421752.html 在测试工作中我们需要不断的总结和储备自己的知识和经验,譬如具备特定属性.环境以及场景,如:PC,手机,智 ...

  5. Appium之编写H5应用测试脚本(切换到Webview)

    App使用H5编写,默认方式找不到元素.启动后获取所有上下文,找到webivew_xxxx的,然后进行切换. 源码: package MyAppium; import io.appium.java_c ...

  6. Supervisord管理进程实践

    今天凑空研究了下Supervisord,这是一款linux进程管理工具,使用python开发,主要用于在后台维护进程(类似master守护进程),可以实现监控进程的状态.自动重启进程等操作,便于一些服 ...

  7. Hibernate中的Entity类之间的继承关系之一MappedSuperclass

    在hibernate中,Entity类可以继承Entity类或非Entity类.但是,关系数据库表之间不存在继承的关系.那么在Entity类之间的继承关系,在数据库表中如何表示呢? Hibernate ...

  8. 初步了解HTML

    超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言. 您可以使用 HTML 来建立自己的 WEB 站点,HTML 运行在浏览器上 ...

  9. Django+Xadmin打造在线教育系统(二)

    基于xadmin的后台管理 先使用pip进行安装xadmin及其依赖包 pip install django-adminx 安装完成后卸载xadmin,保留依赖包即可 pip uninstall dj ...

  10. 2018阿里云短信发送DEMO接入简单实例

    以下更新2018-04-2309:57:54 后续不再更新, 基本类: app/SignatureHelper.php <?php namespace aliyun_mns; /** * 签名助 ...