python常用模块2(序列化,pickle,shelve,json,configparser)

在我们存储数据或者网络传输数据的时候. 需要对我们的对象进行处理. 把对象处理成方便存储和传输的数据格式. 这个过程叫序列化. 不同的序列化, 结果也不同. 但是目的是⼀样的. 都是为了存储和传输.

 

在Python中有三种序列化的方案:

一.pickle

把任意类型数据转化成bytes并写入到文件中.同样也可以把文件中写好的bytes转换回python的数据,后面的,这个过程被称为反序列化.

 

序列化并写入文件中,再读取

import pickle
class Cat: def __init__(self,name,age): self.name=name self.age=age def catMouse(self): print(self.name,"抓老鼠") c = Cat("maomi",3) bs = pickle.dumps(c) #序列化一个对象,得到一堆二进制数据给机器看的 print(bs)
#b'\x80\x03c__main__\nCat\nq\x00)\x81q\x01}q\x02(X\x04\x00\x00\x00nameq\x03X\x05\x00\x00\x00maomiq\x04X\x03\x00\x00\x00ageq\x05K\x03ub.'

f
= open("cat",mode="wb") pickle.dump(c,f) #写入到cat文件中 f.close()

 f = open("cat", mode="rb")
   cc = pickle.load(f) # 从文件中读取对象<__main__.Cat object at 0x000001F1DA5E7CC0>
   cc.catMouse()    #maomi 抓老鼠

 

二. shelve

能够把数据写到硬盘上,操作shleve很像操作一个字典.

import shelve

str = shelve.open("ccj", writeback=True)
del s['jay']
s.close()

 

三.json

 

json全称javascript object notation. 翻译过来叫js对象简谱.json是我们前后端交互的枢纽.,相当于编程界的普通话.

json.dumps(dic)

 

import json
dic = {"a": "女王", "b": "萝莉", "c": "小清新","d":None}
j=json.dumps(dic,ensure_ascii=False) #把字典转化成json字符串
print(j) # {"a": "女王", "b": "萝莉", "c": "小清新", "d": null}

 

把前端传递过来的json字符串转化成字典.

import json
s2 = '{"a": "女王", "b": "萝莉", "c": "小清新", "d": null}'
dic2 = json.loads(s2)
print(type(dic2), dic2)
#<class 'dict'> {'a': '女王', 'b': '萝莉', 'c': '小清新', 'd': None}

 

 四.configgparser

该模块适用于配置文件的格式与windows ini⽂件类似,可以包含⼀个或多个节(section)每个节可以有多个参数(键=值).

 用configparser就可以对这样的文件进行处理理.首先, 是初始化.

import configparser
config = configparser.ConfigParser()
config['DEFAULT'] = {
    "sleep": 1000,
    "session-time-out": 30,
    "user-alive": 999999
}
config['TEST-DB'] = {
    "db_ip": "192.168.17.189",
    "port": "3306",
    "u_name": "root",
    "u_pwd": "123456"
}
config['168-DB'] = {
    "db_ip": "152.163.18.168",
    "port": "3306",
    "u_name": "root",
    "u_pwd": "123456"
}
config['173-DB'] = {
    "db_ip": "152.163.18.173",
    "port": "3306",
    "u_name": "root",
    "u_pwd": "123456"
}
f = open("db.ini", mode="w")
config.write(f) # 写⼊文件
f.flush()
f.close()

读取文件信息:
config = configparser.ConfigParser()
config.read("db.ini") # 读取文件
print(config.sections()) # 获取到section. 章节...DEFAULT是给每个章节都配备的信息
print(config.get("DEFAULT", "SESSION-TIME-OUT")) 
# 从xxx章节中读取到xxx信息
# 也可以像字典⼀样操作
print(config["TEST-DB"]['DB_IP'])
print(config["173-DB"]["db_ip"])
for k in config['168-DB']:
print(k)
for k, v in config["168-DB"].items():
print(k, v)
print(config.options('168-DB')) # 同for循环,找到'168-DB'下所有键
print(config.items('168-DB')) #找到'168-DB'下所有键值对
print(config.get('168-DB','db_ip')) 
# 152.163.18.168 get方法Section下的key对应的value

增删改操作:
# 先读取. 然后修改. 最后写回文件
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"))

 

 

 

 

 

 

posted @ 2018-11-15 17:06  全干  阅读(231)  评论(0编辑  收藏  举报