一、引入模塊的⽅方式: 1. import 模塊 2. from xxx import 模塊 二、collections模塊 collections模塊主要封裝了一些關於集合類的相關操作 需瞭解棧和隊列 棧: FILO. 先進後出 -> 砌牆的磚頭, 老師傅做饅頭 隊列: FIFO. 先進先出 -> ...
一、引入模塊的⽅方式:
1. import 模塊
2. from xxx import 模塊
二、collections模塊
collections模塊主要封裝了一些關於集合類的相關操作
- Counter——counter是一個計數器. 主要⽤用來計數
- deque 雙向隊列
需瞭解棧和隊列
棧: FILO. 先進後出 -> 砌牆的磚頭, 老師傅做饅頭
隊列: FIFO. 先進先出 -> 買火⻋車票排隊, 所有排隊的場景
隊列: python提供了queue模塊. 使用起來非常⽅便
註意. 如果隊列里沒有元素了. 再也就拿不出來元素了. 此時程式會阻塞.
雙向隊列 collections中的,可以從左側添加,也可從右側添加,刪除同理
3.namedtuple 命名元組
給元組內的元素進行命名
from collections import namedtuple
# ⾃⼰定義了一個元組, 如果靈性夠好, 這其實就是創建了了⼀個類
nt = namedtuple("point", ["x", "y"])
p = nt(1, 2)
print(p)
print(p.x)
print(p.y)
4.orderdict和defaultdict
orderdict 顧名思義. 字典的key預設是無序的. 而OrderedDict是有序的
defaultdict: 可以給字典設置預設值. 當key不存在時. 直接獲取預設值:
from collections import defaultdict
dd = defaultdict(list) # 預設值list
print(dd['娃哈哈']) # [] 當key不存在的時候. 會自動執⾏構造方法中傳遞的內容.
三、time模塊 時間模塊
1. 時間戳(timestamp). 時間戳使⽤的是從1970年01月01日 00點00分00秒到現在一共經過了了多少秒... 使⽤float來表示
2. 格式化時間(strftime). 這個時間可以根據我們的需要對時間進⾏任意的格式化.
1. 獲取系統時間 time.time() 時間戳
2. 格式化時間 strftime() 時間格式: %Y-%m-%d %H:%M:%S %Y-%m-%d
3. 結構化時間 time.gmtime() time.localtime()
strptime() 把格式化時間轉化成結構化時間
mktime() 把結構化時間轉化成時間戳
s = time.strftime("%Y-%m-%d %H:%M:%S") 格式化
print(s)
print(time.localtime()) #結構化時間
結果: 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)
所有的轉化都要通過結構化時間來轉化.
t = time.localtime(1888888888) # 結構化時間
s = time.strftime("%Y-%m-%d %H:%M:%S", t) # 格式化這個時間
print(s)
s = "2020-10-01 12:18:12"
t = time.strptime(s, "%Y-%m-%d %H:%M:%S") # 轉化成結構時間
print(time.mktime(t)) # 轉換成時間戳
四、random模塊 -隨機
1 import random 2 print(random.random()) # 0-1⼩小數 3 print(random.uniform(3, 10)) # 3-10⼩小數 4 print(random.randint(1, 10)) # 1-10整數 5 [1, 10] print(random.randrange(1, 10, 2)) # 1-10奇數 6 [1,10) print(random.choice([1, '周傑倫', ["蓋倫", "胡辣湯"]])) # 1或者23或者[4,5]) 7 print(random.sample([1, '23', [4, 5]], 2)) # 列列表元素任意2個組合 8 lst = [1, 2, 3, 4, 5, 6, 7, 8] random.shuffle(lst) # 隨機打亂順序 9 print(lst)
五、os、sys
os和sys
os.sep 文件路徑分隔符
sys.path python查找模塊的路徑
六、序列化
1. pickle 把一個對象轉化成bytes寫入到文件
pickle.dumps() 把對象轉換成bytes
pickle.loads() 把bytes轉化成對象
pickle.dump() 把對象轉換成bytes. 寫入到文件
pickle.load() 把文件中的bytes讀取. 轉化成對象
那真的要寫入或者讀取多個內容怎麼辦? 很簡單. 裝list里. 然後讀取和寫入都⽤list
創建一個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()
記住⼀點, pickle序列化的內容是二進位的內容(bytes) 不是給⼈看的,給機器看的。
2. shelve 小型資料庫, redis, mongodb, dict
當成字典來用
writeback=True 用來執行修改操作,刪除或修改都用它 不用不改變
3. json 以前用xml 先在用json
json.dumps() 把字典轉換成json字元串
json.loads() 把json字元串轉化成字典
json.dump() 把字典轉換成json字元串. 寫入到文件
json.load() 把文件中的json字元串讀取. 轉化成字典
default = 把對象轉化成字典. 需要自己寫轉換過程
object_hook = 把字典轉化成對象. 需要自己寫轉換過程
ensure_ascii = False 可以處理中文
註意. 我們可以向同一個文件中寫⼊多個json串. 但是讀不⾏。
在讀取的時候是⽆法正常讀取的. 那如何解決呢? 兩套方案. 方案一. 把所有的內容準備好統一 進⾏行寫入和讀取. 但這樣處理, 如果數據量小還好. 數據量大的話, 就不夠友好了. 方案二. 不用 dump. 改用dumps和loads. 對每⼀⾏分別進⾏處理.
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文件類似
可以包含一個或多個節(section)每個節 可以有多個參數(鍵=值).