shutil.rmtree 刪除目錄python
import shutil
shutil.rmtree(path)
shutil.move 重命名;移動文件mysql
import shutil
shutil.move('test','ttt')
shutil.make_archive 壓縮文件夾redis
import shutil
shutil.make_archive('cade\asd','zip',r'E:\Python_WorkSpace\day016 模塊\abc')
shutil.unpack_archive 解壓文件sql
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') #解壓文件到指定目錄
兩者優缺點json
json,優勢:全部語言通用;缺點:只能序列化基本的數據類型數據結構
全部字符串都是雙引號;最外層只能是列表或字典socket
存在字典的key只能是str;不能連續load屢次ui
pickle,優勢:python中幾乎全部的東西都能被序列化(socket對象);缺點:序列化的內容只有python認識spa
支持連續load屢次code
一個特殊的字符串。【長得像列表、字典、字符串、數字、真假】
+-------------------+---------------+
| 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)
模塊 = 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()
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