python之路-day21-模組介紹1
一、今日內容大綱
1、關於模組
import
from xxx import xxx 絕對匯入
2、Collections
1)Counter 計數器
2)棧:先進後出
佇列:先進先出
deque : 雙向佇列
3)defaultdict 預設值字典
4)namedtuple 元祖命名。struct_time 結構化時間就是命名元祖
5)OredereDict 有序字典,按照我們儲存的順序儲存
3、time 時間模組
1)獲取系統時間 time.time() 時間戳
2)格式化時間 strftime() 時間格式: %Y-%m-%d %H:%M:%S or %Y-%m-%d
3) 結構化時間:time.gmetime() time.localtime()----東八區
4)把格式化時間轉化為結構時間 strptime()
把結構時間轉化為時間戳 mktime()
4、os和sys
os.sep 檔案路徑分隔符
sys.path python查詢模組的路徑
二、Collections 模組
1、Counter計數器
from collections import Counter s = " i am sylar, i have a dream,,," ss = Counter(s) # 計算⼀個字串中每個字元出現的次數 print(ss) dic = {} for el in s: # 如果字典中包含有給定鍵,則返回該鍵對應的值,否則返回為該鍵設定的值 dic[el] = dic.setdefault(el,0) + 1 print(dic) ##結果: Counter({' ': 7, 'a': 5, ',': 4, 'i': 2, 'm': 2, 'r': 2, 'e': 2, 's': 1, 'y': 1, 'l': 1, 'h': 1, 'v': 1, 'd': 1}) {' ': 7, 'i': 2, 'a': 5, 'm': 2, 's': 1, 'y': 1, 'l': 1, 'r': 2, ',': 4, 'h': 1, 'v': 1, 'e': 2, 'd': 1}
2. deque 雙向佇列.
(重點)說雙向佇列之前我們需要了解兩種資料結構. 1. 棧, 2. 佇列
1. 棧: FILO. 先進後出 -> 砌牆的磚頭, 老師傅做饅頭
2. 佇列: FIFO. 先進先出 -> 買火⻋票排隊, 所有排隊的場景
# 棧 (先進後出) # class Stack: # def __init__(self,size): # self.index = 0 # 棧頂指標 # self.lst = [] # self.size = size # # # 給棧新增元素 # def push(self,item): # if self.index == self.size: # #棧已經滿了,不能再裝東西了 # pass # self.lst.insert(self.index,item) # 對於空列表,需要用insert插入內容 # self.index += 1 # 棧頂指標向上移動 # # # 從棧中獲取資料 # def pop_item(self): # if self.index == 0: # pass # self.index -= 1 # 頂指標向下移動 # item = self.lst.pop(self.index) # 獲取元素刪除 # return item # # s = Stack(5) # 佇列 # import queue 先進先出 # # # q = queue.Queue() # 建立佇列 # q.put("李嘉誠") # q.put("深圳吳彥祖") # q.put("周潤發") # q.put("韓寒") # # print(q.get()) # print(q.get()) # print(q.get()) # print(q.get()) # # print(q.get()) # 如果佇列中沒有元素了,繼續獲取的話會發生阻塞 # print("done") # # 雙向佇列 # # from collections import deque # # q = deque() # 建立一個雙向佇列 # q.append("高圓圓") # q.append("江疏影") # q.appendleft("趙又廷") # q.appendleft("劉某某") # # print(q.pop()) # print(q.pop()) # print(q.popleft()) # print(q.popleft()) # print(q.pop())
3、namedtuple 命名元組
命名元組, 顧名思義. 給元組內的元素進⾏命名. 比如. 我們說(x, y) 這是⼀個元組. 同時. 我們還可以認為這是⼀個點座標.
這時, 我們就可以使⽤namedtuple對元素進⾏命名
# from collections import namedtuple # point = namedtuple("Point", ["x","y","z"]) # p = point(1,23,22) # print(p.x) # print(p.y) # print(p.z) # print(p)
4、defaultdict: 可以給字典設定預設值. 當key不存在時. 直接獲取預設值:
# from collections import defaultdict # # lst = [11,22,33,44,55,66,77,88] # # d = defaultdict(list) # # for el in lst: # if el < 66: # d["key1"].append(el) # else: # d["key2"].append(el) # print(d)
三、time模組
# time # import time # while 1: # s = time.strftime("%Y-%m-%d %H:%M:%S") # print(s) # time.sleep(1) # import time # # t = time.gmtime(971150400.0) # s = time.strftime("%Y-%m-%d %H:%M:%S",t) # print(s) # s = "2000-10-10 12:00:00" # t = time.strptime(s,"%Y-%m-%d %H:%M:%S") # print(time.mktime(t)) # s = "2020-10-01 12:18:12" # t = time.strptime(s, "%Y-%m-%d %H:%M:%S") # 轉化成結構時間 # print(time.mktime(t)) # 轉換成時間戳 # 時間顯示中文 # import locale,time # # locale.setlocale(locale.LC_COLLATE,"chinese") # print(time.strftime("%Y年%m月%d日")) # # 計算時間差 # import time # old_time = time.mktime(time.strptime("2018-11-10 10:30:00","%Y-%m-%d %H:%M:%S")) # nowtime = time.mktime(time.strptime("2018-11-10 12:00:00","%Y-%m-%d %H:%M:%S")) # dif_time = nowtime - old_time # total_min = int(dif_time / 60) # hour = int(total_min / 60) # min = int(total_min % 60) # print("時間差為:%s小時%s分"%(hour,min))
四、random 模組
import random print(random.randint(1,3)) # 1-3隨機取一個,前後都為閉區間 print(random.random()) # 0-1 之間的小數 print(random.uniform(3,10)) # 3-10 之間的隨機小數 print(random.randrange(1,10,3)) # [1,10) 從奇數中獲取隨機數 lst = [1,2,3,4,5,6] random.shuffle(lst) # 打散 print(lst) #[6, 1, 5, 3, 2, 4] print(random.choice([1, '周杰倫', ["蓋倫", "胡辣湯"]])) #取一個元素 print(random.sample([1, '23', [4, 5]], 2)) # 列表元素任意2個組合
五、os模組
import os os.makedirs('dirname1/dirname2') #可⽣成多層遞迴⽬錄 os.removedirs('dirname1') #若⽬錄為空,則刪除,並遞迴到上⼀級⽬錄,如若也為空,則刪 #除,依此類推 os.mkdir('dirname') #⽣成單級⽬錄;相當於shell中mkdir dirname os.rmdir('dirname') # 刪除單級空⽬錄,若⽬錄不為空則⽆法刪除,報錯;相當於shell中rmdir dirname os.listdir('dirname') #列出指定⽬錄下的所有⽂件和⼦⽬錄,包括隱藏⽂件,並以列表⽅式列印 os.remove() #刪除⼀個⽂件 os.rename("oldname","newname") #重新命名⽂件/⽬錄 os.stat('path/filename') #獲取⽂件/⽬錄資訊 os.system("bash command") #運⾏shell命令,直接顯示 os.popen("bash command").read() #運⾏shell命令,獲取執⾏結果 os.getcwd() #獲取當前⼯作⽬錄,即當前python指令碼⼯作的⽬錄路徑 os.chdir("dirname") #改變當前指令碼⼯作⽬錄;相當於shell下cd # os.path os.path.abspath(path) #返回path規範化的絕對路徑 os.path.split(path) #將path分割成⽬錄和⽂件名⼆元組返回 os.path.dirname(path) #返回path的⽬錄。其實就是os.path.split(path)的第⼀個元素 os.path.basename(path) #返回path最後的⽂件名。如何path以/或\結尾,那麼就會返回空值。 #即os.path.split(path)的第⼆個元素 os.path.exists(path) #如果path存在,返回True;如果path不存在,返回False os.path.isabs(path) #如果path是絕對路徑,返回True os.path.isfile(path) #如果path是⼀個存在的⽂件,返回True。否則返回False os.path.isdir(path) #如果path是⼀個存在的⽬錄,則返回True。否則返回False os.path.join(path1[, path2[, ...]]) #將多個路徑組合後返回,第⼀個絕對路徑之前的引數 將被忽略 os.path.getatime(path) #返回path所指向的⽂件或者⽬錄的最後訪問時間 os.path.getmtime(path) #返回path所指向的⽂件或者⽬錄的最後修改時間 os.path.getsize(path) #返回path的⼤⼩ # 特殊屬性: os.sep #輸出作業系統特定的路徑分隔符,win下為"\\",Linux下為"/" os.linesep #輸出當前平臺使⽤的⾏終⽌符,win下為"\r\n",Linux下為"\n" os.pathsep #輸出⽤於分割⽂件路徑的字串 win下為;,Linux下為: os.name #輸出字串指示當前使⽤平臺。win->'nt'; Linux->'posix' os.stat() #屬性解讀: stat #結構: st_mode: inode 保護模式 st_ino: inode 節點號。 st_dev: inode 駐留的裝置。 st_nlink: inode 的連結數。 st_uid: 所有者的⽤戶ID。 st_gid: 所有者的組ID。 st_size: 普通⽂件以位元組為單位的⼤⼩;包含等待某些特殊⽂件的資料。 st_mtime: 最後⼀次修改的時間。 st_ctime: 由作業系統報告的"ctime"。在某些系統上(如Unix)是最新的元資料更改的時間,在 其它系統上(如Windows)是建立時間(詳細資訊參⻅平臺的⽂檔)
六、sys模組
所有和python直譯器相關的都在sys模組. sys.argv 命令⾏引數List,第⼀個元素是程式本身路徑 sys.exit(n) 退出程式,正常退出時exit(0),錯誤退出sys.exit(1) sys.version 獲取Python解釋程式的版本資訊 sys.path 返回模組的搜尋路徑,初始化時使⽤PYTHONPATH環境變數的值 sys.platform 返回作業系統平臺名稱