第五章 模块之 shtil 、 json / pickle、importlib、collections
5.8 shtil 高级的 文件、文件夹、压缩包 处理模块
shutil.rmtree 删除目录
import shutil
shutil.rmtree(path)shutil.move 重命名;移动文件
import shutil
shutil.move('test','ttt')shutil.make_archive 压缩文件夹
import shutil
shutil.make_archive('cade\asd','zip',r'E:\Python_WorkSpace\day016 模块\abc')shutil.unpack_archive 解压文件
import shutil
shutil.unpack_archive('abc.zip',extract_dir=r'E:\Python_WorkSpace\day016 模块\abc',format='zip')# 练习
# 1.压缩lizhongwei文件夹 zip
# 2.放到到 code 目录(默认不存在)
# 3.将文件解压到D:\x1目录中。
import os
import shutil
from datetime import datetime
ctime = datetime.now().strftime('%Y-%m-%d-%H-%M-%S') # 将当前时间转换成字符串
if not os.path.exists('code'): # 判断 code 文件目录是否存在
os.makedirs('code') # 创建 code
shutil.make_archive(os.path.join('code',ctime),'zip','D:\code\s21day16\lizhongwei') # 压缩文件 在code文件夹中,名称为2019-04-18-17-12-24压缩文件
file_path = os.path.join('code',ctime) + '.zip' #被解压文件名称
shutil.unpack_archive(file_path,r'D:\x1','zip') #解压文件到指定目录
5.9 json / pickle 序列化
二者优缺点
json,优点:所有语言通用;缺点:只能序列化基本的数据类型
所有字符串都是双引号;最外层只能是列表或字典
存在字典的key只能是str;不能连续load多次
pickle,优点:python中几乎所有的东西都能被序列化(socket对象);缺点:序列化的内容只有python认识
支持连续load多次
一个特殊的字符串。【长得像列表、字典、字符串、数字、真假】
+-------------------+---------------+
| Python | JSON |
+===================+===============+
| dict | object |
+-------------------+---------------+
| list, tuple | array |
+-------------------+---------------+
| str | string |
+-------------------+---------------+
| int, float | number |
+-------------------+---------------+
| True | true |
+-------------------+---------------+
| False | false |
+-------------------+---------------+
| None | null |
+-------------------+---------------+dumps 序列化,将python的值转换为json格式的字符串(str/bytes类型)。
loads 反序列化,将json格式的字符串转换为python的值。
import pickle
v = {1,2,3,4}
# 序列化,将python的值转换为json格式的字符串。
val = pickle.dumps(v)
print(val)
# 反序列化,将json格式的字符串转换为python的值。
data = pickle.loads(val)
print(data,type(data))# 示例一
import json
v = [1,2,3,4,'frfed','tgrf',[1,3,2]]
# 序列化,将python的值转换为json格式的字符串。
v1 = json.dumps(v)
print(v1,type(v1)) # [1, 2, 3, 4, "frfed", "tgrf", [1, 3, 2]] <class 'str'>
# 反序列化,将json格式的字符串转换为python的值。
v3 = json.loads(v1)
print(v3,type(v3)) # [1, 2, 3, 4, 'frfed', 'tgrf', [1, 3, 2]] <class 'list'>字典或列表中如有中文,序列化时想要保留中文显示:
v = {'k1':"asdf",'k2':'中文'}
import json
val = json.dumps(v,ensure_ascii=False)
print(val) # {"k1": "alex", "k2": "李杰"}dump 将字典以特殊格式写到文件中
load 读取文件中内容转换成字典
v = {'k1':"asdf",'k2':'中文'}
import json
f = open('x.txt',mode='w',encoding='utf-8')
val = json.dump(v,f)
print(val) # None
f.close # {"k1": "asdf", "k2": "\u4e2d\u6587"}
import json
f = open('x.txt',mode='r',encoding='utf-8')
val = json.load(f)
f.close
print(val,type(val)) # {'k1': 'asdf', 'k2': '中文'} <class 'dict'>import pickle
v = {1,2,3,4}
f = open('x.txt',mode='wb')
val = pickle.dump(v,f)
f.close()
f = open('x.txt',mode='rb')
data = pickle.load(f)
f.close()
print(data)
5.10 importlib 根据字符串的形式导入模块。
模块 = importlib.import_module('utils.redis')
# 示例一
import importlib
# 用字符串形式导入模块
redis = importlib.import_module('utils.redis')
# 用字符串的形式去对象(模块)找到他的成员
getattr(redis,'func')()
# 示例二
import importlib
path = 'utils.redis.func'
module_path,func_name = path.rsplit('.',maxsplit=1)
module_object = importlib.import_module(module_path)
getattr(module_object,func_name)()
开放封闭原则
对配置文件开放
对源代码封闭
import importlib
middleware_classes = [
'utils.redis.Redis',
# 'utils.mysql.MySQL',
'utils.mongo.Mongo'
]
for path in middleware_classes:
module_path,class_name = path.rsplit('.',maxsplit=1)
module_object = importlib.import_module(module_path)# from utils import redis
cls = getattr(module_object,class_name)
obj = cls()
obj.connect()
5.11 collections 加强版数据结构
OrderedDict 有序字典
# 示例一
from collections import OrderedDict
info = OrderedDict()
info['k1'] = 123
info['k2'] = 456
print(info.keys()) # odict_keys(['k1', 'k2'])
print(info.values()) # odict_values([123, 456])
print(info.items()) # odict_items([('k1', 123), ('k2', 456)])
# 示例二
from collections import OrderedDict
odic = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
print(odic) # OrderedDict([('a', 1), ('b', 2), ('c', 3)])
for k in odic:
print(k,odic[k])deque 双端队列
defaultDict 默认字典,给value设置一个默认值
namedtuple 可命名元祖
应用:创建一个类,这个类没有办法,所有的属性的值都不能修改
from collections import namedtuple # 可命名元组
Course = namedtuple('Course',['name','price','teacher'])
python = Course('python',19800,'alex')
print(python) # Course(name='python', price=19800, teacher='alex')
print(python.name) # python
print(python.price) # 19800
第五章 模块之 shtil 、 json / pickle、importlib、collections的更多相关文章
- 常用模块(random,os,json,pickle,shelve)
常用模块(random,os,json,pickle,shelve) random import random print(random.random()) # 0-1之间的小数 print(rand ...
- python模块概况,json/pickle,time/datetime,logging
参考: http://www.cnblogs.com/wupeiqi/articles/5501365.html http://www.cnblogs.com/alex3714/articles/51 ...
- day16 常用模块 sys os json pickle
知识点 os:和操作系统相关sys:和解释器相关 json:和操作JSON(一种数据交换格式)相关pickle:序列化 hashlib:加密算法Collections:集合类型 ...
- Python全栈之路----常用模块----序列化(json&pickle&shelve)模块详解
把内存数据转成字符,叫序列化:把字符转成内存数据类型,叫反序列化. Json模块 Json模块提供了四个功能:序列化:dumps.dump:反序列化:loads.load. import json d ...
- Python全栈开发记录_第八篇(模块收尾工作 json & pickle & shelve & xml)
由于上一篇篇幅较大,留下的这一点内容就想在这里说一下,顺便有个小练习给大家一起玩玩,首先来学习json 和 pickle. 之前我们学习过用eval内置方法可以将一个字符串转成python对象,不过, ...
- python 模块二(os,json,pickle)
#################################总结##################### os常用 os.makedirs('baby/安哥拉/特斯拉/黄晓明') os.mkd ...
- Python_Mix*OS模块,序列化模块种的json,pickle
os.path.basename(path)返回path最后的文件名,如何path以/或\结尾,那么就会返回空值,即os.path.split(path)的第一个元素 ret = os.path.ba ...
- Python学习系列----第五章 模块
5.1 如何引入模块 在Python中用关键字import来引入某个模块,比如要引用模块math,就可以在文件最开始的地方用import math来引入.在调用math模块中的函数时,必须这样引用: ...
- 第五章 模块之random 、hashlib、time /datetime
5.2 random 返回随机生成的一个实数 random.randint() 返回随机生成的一个实数 import random #调用模块def get_random_code(length=6 ...
随机推荐
- ubuntu之路——day7.1 衡量模型好坏的因素偏差和方差bias&variance 以及在深度学习中的模型优化思路
Error | 误差 Bias | 偏差 – 衡量准确性 Variance | 方差 – 衡量稳定性 首先我们通常在实际操作中会直接用错误率或者与之对应的准确率来衡量一个模型的好坏,但是更加准确的做法 ...
- 肠道微生物研究进展 | Microbiology | Human Gut Microbiome | human gut microbiota
之前我有过一篇16s基本概念和数据分析的文章.16S 基础知识.分析工具和分析流程详解 可以分成两部分,生物层面和技术层面. 生物层面: 1. 肠道微生物里面包含了哪些微生物?显然包含了所有层面的微生 ...
- Python——graphviz及pydotplus安装步骤
Python——graphviz及pydotplus安装步骤 一.安装Graphviz 网站:http://www.graphviz.org/download/ 下载msi文件 直接安装,完成之后添加 ...
- windows下jenkins的安装与配置
项目自动化部署: https://www.cnblogs.com/wuxunyan/p/9592953.html https://blog.csdn.net/qq_37372007/article/d ...
- Python 23种设计模式全(python例子)
从今年5月份开始打算把设计模式都写到博客里,持续到现在总算是写完了.写的很慢,好歹算是有始有终.对这些设计模式有些理解的不准确,有些甚至可能是错的,请看到的同学拍砖留言.内容来源很杂,大部分参考或者摘 ...
- OptaPlanner 试验
OptaPlanner - Constraint satisfaction solver (Java™, Open Source)https://www.optaplanner.org/ jboss/ ...
- Error-ASP.NET:由于未能找到 id 为“FileUpload1$gvFiles$ctl02$lnkBtnRemoveFile”的控件或在回发后将同一 ID 分配给另一个控件,导致发生错误。如果未分配 ID,请显式设置引发回发事件的控件的 ID 属性以避免此错误。
ylbtech-Error-ASP.NET:由于未能找到 id 为“FileUpload1$gvFiles$ctl02$lnkBtnRemoveFile”的控件或在回发后将同一 ID 分配给另一个控件 ...
- postgre ~模糊查询慢解决方式
工作中遇到个情况 sql如下: SELECT org.id orgid,org."path" FROM ( SELECT * FROM A INNER JOIN t_org org ...
- Mysql的三种数据类型
Mysql的三种数据类型 1.数值类型 2.日期和时间类型 3.字符串类型 00x1 [数值类型] 00x2 [日期和时间类型] 00x3 [字符串类型]
- python学习导图