python--(常用模块-2序列化)
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序列化)的更多相关文章
- Python 常用模块(2) 序列化(pickle,shelve,json,configpaser)
主要内容: 一. 序列化概述 二. pickle模块 三. shelve模块 四. json模块(重点!) 五. configpaser模块 一. 序列化概述1. 序列化: 将字典,列表等内容转换成一 ...
- (转)python常用模块(模块和包的解释,time模块,sys模块,random模块,os模块,json和pickle序列化模块)
阅读目录 1.1.1导入模块 1.1.2__name__ 1.1模块 什么是模块: 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代 ...
- python——常用模块2
python--常用模块2 1 logging模块 1.1 函数式简单配置 import logging logging.debug("debug message") loggin ...
- python常用模块之shelve模块
python常用模块之shelve模块 shelve模块是一个简单的k,v将内存中的数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据类型 我们在上面讲json.pickle ...
- python常用模块之json、pickle模块
python常用模块之json.pickle模块 什么是序列化? 序列化就是把内存里的数据类型转换成字符,以便其能存储到硬盘或者通过网络进行传输,因为硬盘或网络传输时只接受bytes. 为什么要序列化 ...
- 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 ...
- python常用模块集合
python常用模块集合 Python自定义模块 python collections模块/系列 Python 常用模块-json/pickle序列化/反序列化 python 常用模块os系统接口 p ...
- Python常用模块小结
目录 Python常用模块小结 一.Python常用模块小结 1.1 time模块 1.2 datetime模块 1.3 random模块 1.4 os模块 1.5 sys模块 1.6 json模块 ...
- python常用模块 以及第三方导入
python常用模块 1模块的分类 标准模块(内置模块)( 标准库 )300 第三方模块 18万 pip install 直接通过pip安装 软件一般会被自动安装你python安装目录的这个子目录里 ...
- Python常用模块之sys
Python常用模块之sys sys模块提供了一系列有关Python运行环境的变量和函数. 常见用法 sys.argv 可以用sys.argv获取当前正在执行的命令行参数的参数列表(list). 变量 ...
随机推荐
- Python中的全局变量与局部变量的区别
全局变量与局部变量两者的本质区别就是在于作用域 用通俗的话来理解的话, 全局变量是在整个py文件中声明,全局范围内都可以访问 局部变量是在某个函数中声明的,只能在该函数中调用它,如果试图在超出范围的地 ...
- SpringBoot 配置 @ConfigurationProperties 与 @Value 区别
一.SpringBoot 配置 @ConfigurationProperties 与 @Value 区别 配置文件 yml 还是 properties 他们都能获取到值: 如果说,我们只是在某个业务逻 ...
- 警告: 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 ...
- [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 ...
- 深刻理解Nginx之基本配置和升级(2)
3 Nginx基本配置 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvam9obl9mX2xhdQ==/font/5a6L5L2T/fontsize/400 ...
- PECL轻松安装PHP扩展
搭建PHP环境的时候,我们通常不会把全部的扩展都安装,随着需求不断添加,可能须要安装新的扩展,以下介绍一种简便的安装方法. 此处以ev.so扩展为例. 1.进入php安装文件夹bin文件夹.cd /A ...
- 刚接触Joomla,写一下瞎折腾的初感受~
我这几天一直在苦苦寻找一款能够长期投靠的CMS产品,要求的是 1)必须支持命名空间 2)必须OOP + MVC分层 3)丰富分文档和使用群体,至少是出名的.免得哪一天他们解散了 4)-- 一開始我把目 ...
- UVA 1149 Bin Packing 二分+贪心
A set of n 1-dimensional items have to be packed in identical bins. All bins have exactly the samele ...
- Android::开机自启动C程序【转】
本文转载自:http://blog.csdn.net/Kaiwii/article/details/7681736 之前一篇博文介绍了shell脚本文件的开机启动,地址是http://blog.chi ...
- Spring MVC【入门】
Spring MVC[入门]就这一篇! MVC 设计概述 在早期 Java Web 的开发中,统一把显示层.控制层.数据层的操作全部交给 JSP 或者 JavaBean 来进行处理,我们称之为 Mod ...