python--(常用模块-2序列化)

一.序列化:

  把对象打散成bytes或者字符串。 方便存储和传输 序列化
  把bytes或者字符串转换回对象。 反序列化

# dumps 序列化。 把对象转化成bytes
# loads 反序列化。 把bytes转化成对象
# dump 序列化。 把对象转化成bytes并写入文件
# load 反序列化。把文件中的bytes读取。转化成对象

二.pickle(比较重要)

  把python中所有的对象都可以转化成bytes。进行存储和传输

  

 # 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() # lst = [Cat("jerry",Cat("tommy",20),Cat("alpha",21))]
#
# f = open("cat",mode = "wb")
# pickle.dump(lst,f) #写入到文件中
#
# f = open("cat",mode = "rb")
# l1 = pickle.load(f) #从文件中读取
# for i in l1:
# i.catchMouse()

三.shelve 

  shelve提供python的持久化操作. 什么叫持久化操作呢? 说⽩话,就是把数据写到硬盘上.
  在操作shelve的时候非常的像操作⼀个字典. 这个东⻄到后期. 就像redis差不多.

 import shelve

 # 打开一个文件
# f = shelve.open("大阳哥", writeback=True)
# f['jj'] = "林俊杰"
# f['dyg'] = "大阳哥"
# f['zzr'] = "周芷若" # f = {}
# 像操作字典一样操作文件
# f["jay"] = "周杰伦"
# print(f['jay']) # f["jay"] = {'name': "周杰伦", 'age': 38, "hobby": "吃喝拉撒睡"} # f['jay']['name'] = "胡辣汤"
# print(f['jay']['name'])
# print(f['jay']) # f.close() f = shelve.open("大阳哥")
# print(f.keys())
# for k in f.keys(): # 可以获取到所有的key
# print(k)
#
# for k in f:
# print(k)
#
# for k, v in f.items():
# print(k, v)

四.json(重点)  

  json是我们前后端交互的枢纽. 相当于编程界的普通话. ⼤家沟通都⽤
   json. 为什么这样呢? 因为json的语法格式可以完美的表⽰出⼀个对象. 那什么是json: json全
   称javascript object notation. 翻译过来叫js对象简谱.

 # import json
# dic = {"a":"女王","b":"萝莉","c":"小仙女"}
# s = json.dumps(dic) #把字典转换成json字符串
# print(s)
# #{"a": "\u5973\u738b", "b": "\u841d\u8389", "c": "\u5c0f\u4ed9\u5973"}
#
# import json
# dic = {"a":"女王","b":"萝莉","c":"小仙女"}
# s = json.dumps(dic,ensure_ascii=False) #ensure_ascii=False 去asxiii码
# print(type(s),s)
# #<class 'str'> {"a": "女王", "b": "萝莉", "c": "小仙女"}
#
# import json
# s = '{"a": "⼥王", "b": "萝莉", "c": "小仙女"}'
# dic = json.loads(s)
# print(type(dic),dic)
# #<class 'dict'> {'a': '⼥王', 'b': '萝莉', 'c': '小仙女'} # #写入文件
# dic = {"a": "⼥王", "b": "萝莉", "c": "⼩清新"}
# f = open("test.json", mode="w", encoding="utf-8")
# json.dump(dic, f, ensure_ascii=False) # 把对象打散成json写⼊到⽂件中
# f.close()
#
# #读取文件
# f = open("test.json", mode="r", encoding="utf-8")
# dic = json.load(f)
# f.close()
# print(dic) # 注意我们可以向同一个文件写入多个json串,但是读不行.
# 写入的时候
# 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)

六.configparser

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

 [DEFAULT] [DEFAULT]
ServerAliveInterval = 45
Compression = yes
CompressionLevel = 9
ForwardX11 = yes
[[bitbucket.org bitbucket.org]]
User = hg
[[topsecret.server.com topsecret.server.com]]
Port = 50022
ForwardX11 = no

   我们用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": "",
"u_name": "root",
"u_pwd": ""
}
config['168-DB'] = {
"db_ip": "152.163.18.168",
"port": "",
"u_name": "root",
"u_pwd": ""
}
config['173-DB'] = {
"db_ip": "152.163.18.173",
"port": "",
"u_name": "root",
"u_pwd": ""
}
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"

    

python--(常用模块-2序列化)的更多相关文章

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

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

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

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

  3. python——常用模块2

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

  4. python常用模块之shelve模块

    python常用模块之shelve模块 shelve模块是一个简单的k,v将内存中的数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据类型 我们在上面讲json.pickle ...

  5. python常用模块之json、pickle模块

    python常用模块之json.pickle模块 什么是序列化? 序列化就是把内存里的数据类型转换成字符,以便其能存储到硬盘或者通过网络进行传输,因为硬盘或网络传输时只接受bytes. 为什么要序列化 ...

  6. 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 ...

  7. python常用模块集合

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

  8. Python常用模块小结

    目录 Python常用模块小结 一.Python常用模块小结 1.1 time模块 1.2 datetime模块 1.3 random模块 1.4 os模块 1.5 sys模块 1.6 json模块 ...

  9. python常用模块 以及第三方导入

    python常用模块 1模块的分类 标准模块(内置模块)( 标准库 )300 第三方模块 18万 pip install 直接通过pip安装 软件一般会被自动安装你python安装目录的这个子目录里 ...

  10. Python常用模块之sys

    Python常用模块之sys sys模块提供了一系列有关Python运行环境的变量和函数. 常见用法 sys.argv 可以用sys.argv获取当前正在执行的命令行参数的参数列表(list). 变量 ...

随机推荐

  1. MAVEN 的常用命令

    1.清除命令:mvn clean 2.编译命令:mvn  conpile 3.打包命令:mvn package 4.跳过单元测试命令:mvn clean package -Dmaven.test.sk ...

  2. 16 个 Linux 服务器监控命令

    如果你想知道你的服务器正在做干什么,你就需要了解一些基本的命令,一旦你精通了这些命令,那你就是一个 专业的 Linux 系统管理员. 有些 Linux 发行版会提供 GUI 程序来进行系统的监控,例如 ...

  3. Acdream A - Unique Attack

    A - Unique Attack Time Limit: 6000/3000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others)   ...

  4. LinkedList 注意事项

      public E getFirst() 返回此列表的第一个元素. public E getLast() 返回此列表的最后一个元素. public E removeFirst() 移除并返回此列表的 ...

  5. 如何打开WCF测试客户端

  6. ASP.NET—011:JavaScript报错常见问题

    相信大家都写过JavaScript.JS由于语法以及自己须要实现的业务的原因,可能在一个页面上要写长篇大论.或者单独写js文件写了好几百K.JS不可否认给Web编程带了很多的方便. 可是假设JS发生了 ...

  7. hdu 4997 Biconnected

    这题主要是计算连通子图的个数(c)和不连通子图的个数(dc)还有连通度为1的子图的个数(c1)和连通度为2以上的子图的个数(c2)之间的转化关系 主要思路大概例如以下: 用状态压缩的方法算出状态为x的 ...

  8. 新东方雅思词汇---6.1、oppose

    新东方雅思词汇---6.1.oppose 一.总结 一句话总结:op(相反)+pos(放) 英 [ə'pəʊz]  美 [ə'poz]  vt. 反对:对抗,抗争 vi. 反对 [ 过去式 oppos ...

  9. 敏捷开发 —— TDD(测试驱动开发)

    测试驱动开发 TDD(Test-Driven Development)是敏捷开发的一项核心实践,同时也是一种设计技术和方法. 既然是测试驱动,便是测试,测试用例先行: 首先编写好测试用例,期待值,实际 ...

  10. ubuntu 使用阿里云 apt 源

    以下内容来自 https://opsx.alibaba.com/mirror Ubuntu对应的“帮助”信息 修改方式:打开 /et/apt/sources.list 将http://archive. ...