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. Python中的全局变量与局部变量的区别

    全局变量与局部变量两者的本质区别就是在于作用域 用通俗的话来理解的话, 全局变量是在整个py文件中声明,全局范围内都可以访问 局部变量是在某个函数中声明的,只能在该函数中调用它,如果试图在超出范围的地 ...

  2. SpringBoot 配置 @ConfigurationProperties 与 @Value 区别

    一.SpringBoot 配置 @ConfigurationProperties 与 @Value 区别 配置文件 yml 还是 properties 他们都能获取到值: 如果说,我们只是在某个业务逻 ...

  3. 警告: The APR based Apache Tomcat Native library failed to load.

    警告: The APR based Apache Tomcat Native library failed to load. The error reported was [C:\apache-tom ...

  4. [HTML5] How Visible vs. Hidden Elements Affect Keyboard/Screen Reader Users (ARIA)

    There are many techniques for hiding content in user interfaces, and not all are created equal! Lear ...

  5. 深刻理解Nginx之基本配置和升级(2)

    3 Nginx基本配置 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvam9obl9mX2xhdQ==/font/5a6L5L2T/fontsize/400 ...

  6. PECL轻松安装PHP扩展

    搭建PHP环境的时候,我们通常不会把全部的扩展都安装,随着需求不断添加,可能须要安装新的扩展,以下介绍一种简便的安装方法. 此处以ev.so扩展为例. 1.进入php安装文件夹bin文件夹.cd /A ...

  7. 刚接触Joomla,写一下瞎折腾的初感受~

    我这几天一直在苦苦寻找一款能够长期投靠的CMS产品,要求的是 1)必须支持命名空间 2)必须OOP + MVC分层 3)丰富分文档和使用群体,至少是出名的.免得哪一天他们解散了 4)-- 一開始我把目 ...

  8. UVA 1149 Bin Packing 二分+贪心

    A set of n 1-dimensional items have to be packed in identical bins. All bins have exactly the samele ...

  9. Android::开机自启动C程序【转】

    本文转载自:http://blog.csdn.net/Kaiwii/article/details/7681736 之前一篇博文介绍了shell脚本文件的开机启动,地址是http://blog.chi ...

  10. Spring MVC【入门】

    Spring MVC[入门]就这一篇! MVC 设计概述 在早期 Java Web 的开发中,统一把显示层.控制层.数据层的操作全部交给 JSP 或者 JavaBean 来进行处理,我们称之为 Mod ...