day22 模块-collections,time,random,pickle,shelve等
1. 認(rèn)識(shí)模塊
模塊可以認(rèn)為是一個(gè)py文件. 模塊實(shí)際上是我們的py文件運(yùn)行后的名稱空間
導(dǎo)入模塊:
1. 判斷sys.modules中是否已經(jīng)導(dǎo)入過該模塊
2. 開辟一個(gè)內(nèi)存
3. 在這個(gè)內(nèi)存中執(zhí)行該py文件
4. 給這個(gè)內(nèi)存起個(gè)名字, 一般用的是py文件的名字。返回給導(dǎo)入方
如果你的py文件是啟動(dòng)文件, 名字是__main__
程序的入口一般是:
if __name__ == "__main__":
pass
1. import 模塊
import 模塊名
模塊名.屬性/方法/類
每個(gè)模塊都有自己的獨(dú)立的名稱空間,每個(gè)都有一個(gè)global, 互相并不影響
模塊.屬性 = 值. # 不要隨意更改模塊的值
?
2. from xxx import 模塊
from 模塊 import 函數(shù)/變量
當(dāng)作自己的變量或者函數(shù)來使用
from xxx import * 導(dǎo)入所有
導(dǎo)入的內(nèi)容都可以起別名 as
?
二、collections模塊
collections模塊主要封裝了一些關(guān)于集合類的相關(guān)操作
需了解棧和隊(duì)列
棧:? FILO. 先進(jìn)后出? -> 砌墻的磚頭, 老師傅做饅頭
隊(duì)列: FIFO. 先進(jìn)先出? -> 買火?車票排隊(duì), 所有排隊(duì)的場(chǎng)景
隊(duì)列: python提供了queue模塊. 使用起來非常?便
注意. 如果隊(duì)列里沒有元素了. 再也就拿不出來元素了. 此時(shí)程序會(huì)阻塞.
雙向隊(duì)列 collections中的,可以從左側(cè)添加,也可從右側(cè)添加,刪除同理
3.namedtuple 命名元組
給元組內(nèi)的元素進(jìn)行命名
from collections import namedtuple
# ??定義了一個(gè)元組, 如果靈性夠好, 這其實(shí)就是創(chuàng)建了了?個(gè)類
nt = namedtuple("point", ["x", "y"])
p = nt(1, 2)
print(p)
print(p.x)
print(p.y)
?
4.orderdict和defaultdict
orderdict 顧名思義. 字典的key默認(rèn)是無序的. 而OrderedDict是有序的
defaultdict: 可以給字典設(shè)置默認(rèn)值. 當(dāng)key不存在時(shí). 直接獲取默認(rèn)值:
from collections import defaultdict
dd = defaultdict(list)? # 默認(rèn)值list
print(dd['娃哈哈']) # [] 當(dāng)key不存在的時(shí)候. 會(huì)自動(dòng)執(zhí)?構(gòu)造方法中傳遞的內(nèi)容.
?
三、time模塊 ?時(shí)間模塊
?1.? 時(shí)間戳(timestamp). 時(shí)間戳使?的是從1970年01月01日 00點(diǎn)00分00秒到現(xiàn)在一共經(jīng)過了了多少秒... 使?float來表示
2.? 格式化時(shí)間(strftime). 這個(gè)時(shí)間可以根據(jù)我們的需要對(duì)時(shí)間進(jìn)?任意的格式化.
?
1. 獲取系統(tǒng)時(shí)間 time.time() 時(shí)間戳
2. 格式化時(shí)間 strftime() 時(shí)間格式: %Y-%m-%d %H:%M:%S?????? %Y-%m-%d
3. 結(jié)構(gòu)化時(shí)間 time.gmtime() time.localtime()
?? strptime() 把格式化時(shí)間轉(zhuǎn)化成結(jié)構(gòu)化時(shí)間
?? mktime()? 把結(jié)構(gòu)化時(shí)間轉(zhuǎn)化成時(shí)間戳
?
s = time.strftime("%Y-%m-%d %H:%M:%S")? 格式化
print(s)
?
print(time.localtime()) #結(jié)構(gòu)化時(shí)間
結(jié)果: time.struct_time(tm_year=2017, tm_mon=05, tm_mday=8, tm_hour=10, tm_min=24, tm_sec=42, tm_wday=0, tm_yday=126, tm_isdst=0)
?
所有的轉(zhuǎn)化都要通過結(jié)構(gòu)化時(shí)間來轉(zhuǎn)化.
t = time.localtime(1888888888)? # 結(jié)構(gòu)化時(shí)間
s = time.strftime("%Y-%m-%d %H:%M:%S", t) # 格式化這個(gè)時(shí)間
print(s)
?
s = "2020-10-01 12:18:12"
t = time.strptime(s, "%Y-%m-%d %H:%M:%S")?? # 轉(zhuǎn)化成結(jié)構(gòu)時(shí)間
print(time.mktime(t))?? # 轉(zhuǎn)換成時(shí)間戳
?
四、random模塊 -隨機(jī)
1 import random 2 print(random.random()) # 0-1?小數(shù) 3 print(random.uniform(3, 10)) # 3-10?小數(shù) 4 print(random.randint(1, 10)) # 1-10整數(shù) 5 [1, 10] print(random.randrange(1, 10, 2)) # 1-10奇數(shù) 6 [1,10) print(random.choice([1, '周杰倫', ["蓋倫", "胡辣湯"]])) # 1或者23或者[4,5]) 7 print(random.sample([1, '23', [4, 5]], 2)) # 列列表元素任意2個(gè)組合 8 lst = [1, 2, 3, 4, 5, 6, 7, 8] random.shuffle(lst) # 隨機(jī)打亂順序 9 print(lst)?
五、os、sys
os和sys
?
os.sep 文件路徑分隔符
sys.path? python查找模塊的路徑
?
六、序列化
?
??? 1. pickle? 把一個(gè)對(duì)象轉(zhuǎn)化成bytes寫入到文件
??????? pickle.dumps() 把對(duì)象轉(zhuǎn)換成bytes
??????? pickle.loads() 把bytes轉(zhuǎn)化成對(duì)象
?
??????? pickle.dump() 把對(duì)象轉(zhuǎn)換成bytes. 寫入到文件
??????? pickle.load() 把文件中的bytes讀取. 轉(zhuǎn)化成對(duì)象
?????? ? 那真的要寫入或者讀取多個(gè)內(nèi)容怎么辦? 很簡(jiǎn)單. 裝list里. 然后讀取和寫入都?list
創(chuàng)建一個(gè)Car類 擁有名字,年齡屬性
lst = [Cat("jerry", 19), Cat("tommy", 20), Cat("alpha", 21)]
f = open("cat", mode="wb")
pickle.dump(lst, f)
?
f = open("cat", mode="rb")
ll = pickle.load(f)
for el in ll:???
el.catchMouse()
記住?點(diǎn), pickle序列化的內(nèi)容是二進(jìn)制的內(nèi)容(bytes) 不是給?看的,給機(jī)器看的。
??? 2. shelve 小型數(shù)據(jù)庫, redis, mongodb, dict
??????? 當(dāng)成字典來用
??????? writeback=True 用來執(zhí)行修改操作,刪除或修改都用它 不用不改變
?
??? 3. json 以前用xml? 先在用json
??????? json.dumps() 把字典轉(zhuǎn)換成json字符串
??????? json.loads() 把json字符串轉(zhuǎn)化成字典
?
??????? json.dump() 把字典轉(zhuǎn)換成json字符串. 寫入到文件
??????? json.load() 把文件中的json字符串讀取. 轉(zhuǎn)化成字典
?
??????? default = func()? 把對(duì)象轉(zhuǎn)化成字典. 需要自己寫函數(shù)轉(zhuǎn)換過程
??????? object_hook = func() 把字典轉(zhuǎn)化成對(duì)象. 需要自己寫函數(shù)轉(zhuǎn)換過程
??????? ensure_ascii = False? 可以處理中文
?
? 注意. 我們可以向同一個(gè)文件中寫?多個(gè)json串. 但是讀不?。
在讀取的時(shí)候是?法正常讀取的. 那如何解決呢? 兩套方案. 方案一. 把所有的內(nèi)容準(zhǔn)備好統(tǒng)一 進(jìn)?行寫入和讀取. 但這樣處理, 如果數(shù)據(jù)量小還好. 數(shù)據(jù)量大的話, 就不夠友好了. 方案二. 不用 dump. 改用dumps和loads. 對(duì)每??分別進(jìn)?處理.
1 import json 2 lst = [{"a": 1}, {"b": 2}, {"c": 3}] 3 # 寫? 4 f = open("test.json", mode="w", encoding="utf-8") 5 for el in lst: 6 s = json.dumps(el, ensure_ascii=True) + "\n" 7 f.write(s) 8 f.close() 9 10 # 讀取 11 f = open("test.json", mode="r", encoding="utf-8") 12 for line in f: 13 dic = json.loads(line.strip()) 14 print(dic) 15 f.close()?
?
4.configparser 處理windows配置文件的? dict
適用于配置文件的格式與windows ini文件類似
可以包含一個(gè)或多個(gè)節(jié)(section)每個(gè)節(jié) 可以有多個(gè)參數(shù)(鍵=值).
轉(zhuǎn)載于:https://www.cnblogs.com/honghong7725/p/9974914.html
總結(jié)
以上是生活随笔為你收集整理的day22 模块-collections,time,random,pickle,shelve等的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IDEA格式化SQL代码
- 下一篇: 最新PC游戏下载链接