1 from collections import Counter 2 3 s = "狗咬我一口,難道我還要去咬狗?" 4 # dic = {} 5 # for el in s: 6 # dic[el] = dic.setdefault(el,0) + 1 7 # print(dic) 8 9 c ...
# 模塊:模塊就是我們把裝有特定功能的代碼進⾏歸類的結果
# 目前寫的所有的py⽂件都是模塊
# 引入方式:
# 1.import 模塊
# 2.from xxx import 模塊
# 目前都是用的python內置模塊 後面高級框架時需要額外安裝第三方模塊
# collections模塊:
# 1.Counter 計數器 計數
1 from collections import Counter 2 3 s = "狗咬我一口,難道我還要去咬狗?" 4 # dic = {} 5 # for el in s: 6 # dic[el] = dic.setdefault(el,0) + 1 7 # print(dic) 8 9 c = Counter(s) # 獲取到的結果可像字典一樣使用 10 # print("__iter__"in dir(c)) 11 print(c) 12 # for k in c: 13 # print(k, c[k])View Code
# 2.雙向隊列
# 數據結構: 棧 先進後出 隊列 先進先出
1 # python中提供了列隊 沒有棧 自己寫一個棧 2 class StackFullError(Exception): 3 pass 4 class StackEmptyError(Exception): 5 pass 6 7 class Stack: 8 def __init__(self, size): 9 self.index = 0 # 棧頂指針 10 self.lst = [] 11 self.size = size 12 13 # 給棧添加元素 14 def push(self, item): 15 if self.index == self.size: 16 # 棧已經滿了. 不能再裝東西了 17 raise StackFullError('the stack is full') 18 self.lst.insert(self.index, item) # 對於空列表. 需要insert插入內容 19 # self.lst[self.index] = item # 把元素放到棧里 20 self.index += 1 # 棧頂指針向上移動 21 22 # 從棧中獲取數據 23 def pop(self): 24 if self.index == 0: 25 raise StackEmptyError("the stack is empty") 26 self.index -=1 # 指針向下移動 27 item = self.lst.pop(self.index) # 獲取元素. 刪除. 28 return item 29 30 # s = Stack(5) 31 # s.push("饅頭1號") 32 # s.push("饅頭2號") 33 # s.push("饅頭3號") 34 # s.push("饅頭4號") 35 # s.push("饅頭5號") 36 # 37 # print(s.pop()) 38 # print(s.pop()) 39 # print(s.pop()) 40 # print(s.pop()) 41 # print(s.pop()) 42 # 43 # 44 # lst = [] 45 # lst.append("哈哈1") 46 # lst.append("哈哈2") 47 # lst.append("哈哈3") 48 # lst.append("哈哈4") 49 # 50 # print(lst.pop()) 51 # print(lst.pop()) 52 # print(lst.pop()) 53 # print(lst.pop())View Code
# 隊列 先進先出
# python提供了queue模塊. 直接用
1 import queue 2 3 q = queue.Queue() 4 q.put("林俊傑") 5 q.put("王力巨集") 6 q.put("周傑倫") 7 q.put("陳道明") 8 9 # print(q.get()) 10 # print(q.get()) 11 # print(q.get()) 12 # print(q.get()) 13 # 14 # # print(q.get()) # 若隊伍里沒有元素了, 繼續獲取 會阻塞 15 # input() # 也會阻塞 輸入等待 enter就能結束 16 # print("沒有了。。。")View Code
# deque 註意,此列隊是collection中的
1 from collections import deque 2 3 q = deque() 4 5 q.append("劉亦菲") 6 q.append("江疏影") 7 q.appendleft("楊冪") 8 q.appendleft("胡歌") 9 10 # print(q.pop()) # 從右邊拿 11 # print(q.pop()) 12 # print(q.popleft()) # 從左邊拿 13 # print(q.popleft()) 14 15 # print(q.pop()) # 若隊伍里沒有元素了 會報錯View Code
# 3.namedtuple 命名元祖
1 from collections import namedtuple 2 3 point = namedtuple("點",["x","y","z"]) # 等同一個只有屬性的類 4 # class point: 5 # def __init__(self,x,y,z): 6 # self.x = x 7 # self.y = y 8 # self.z = z 9 10 p = point(5,6,7) 11 print(p.x) 12 print(p.y) 13 print(p.z) 14 15 print(p) 16 p.x = 21 # 報錯 不可改 終歸是一個元祖View Code
# 4.defaultdict
# 可以給字典設置預設值. 當key不存在時. 直接獲取預設值:
1 from collections import defaultdict 2 3 lst = [11,22,33,44,55,66] 4 d = defaultdict(list) 5 for el in lst: 6 if el <22: 7 d['key1'].append(el) # key1預設是不存在的. 但是可以拿key1. 一個空列表. 8 else: 9 d["key2"].append(el) 10 11 print(d)View Code
# 5.orderdict
# orderdict 字典預設無序 OrderedDict是有序的
1 dic = {'a':'娃哈哈', 'b':'薯條', 'c':'胡辣湯'} 2 print(dic) 3 from collections import OrderedDict 4 od = OrderedDict({'a':'娃哈哈', 'b':'薯條', 'c':'胡辣湯'}) 5 print(od)View Code
# 時間模塊
# 獲取當前系統時間, 時間戳
# print(time.time()) # 1542166230.6139991, 給機器看的, 以1970-01-01 00:00:00為起點
# 格式化時間
1 import time 2 # 獲取當前時間 3 s = time.strftime("%Y-%m-%d %H:%M:%S") 4 print(s) # 2018-11-14 11:47:29
# 應用-計時器
1 time.sleep(5) # 睡 到點起床 類似的 wait() -> notify() 2 3 while 1: 4 s = time.strftime("%Y-%m-%d %H:%M:%S") 5 print(s) 6 time.sleep(1)
# 時間戳 -> 格式化時間
1 import time 2 t = time.localtime(31999999999) # localtime 本地時間 gmtime() 格林尼治時間 時差 3 print(t) 4 str_time = time.strftime("%Y-%m-%d %H:%M:%S",t) 5 print(str_time)
# 格式化時間 -> 時間戳
1 s = "2984-01-15 16:53:19" 2 # 先結構化時間 3 t = time.strptime(s,"%Y-%m-%d %H:%M:%S") # 註意:要轉化的格式是什麼 結構化時就是什麼 4 print(t) 5 ss = time.mktime(t) 6 print(ss)
# 註:結構化時間實際上就是一個命名元祖 如:
1 t = time.localtime() 2 # print(t) # time.struct_time(tm_year=2018, tm_mon=11, tm_mday=14, tm_hour=20, tm_min=46, tm_sec=45, tm_wday=2, tm_yday=318, tm_isdst=0) 3 # 實際在程式里是(2018, 11, 14, 20, 46, 45, 2, 318, 0)
# 時間差計算
1 import time 2 3 time_now = time.strptime("2018-11-14 15:07:08","%Y-%m-%d %H:%M:%S") 4 time_old = time.strptime("2017-12-25 18:07:22","%Y-%m-%d %H:%M:%S") 5 diff_cha = time.mktime(time_now) - time.mktime(time_old) # 先轉換成時間戳 6 # 方案一 7 re = time.gmtime(diff_cha) # 結構化時間 8 re1 = time.strftime("%Y-%m-%d %H:%M:%S",re) # 格式化時間 9 # 註意預設時間1970-01-01,要減去。 10 print("相差%s年%s月%s天%s小時%s分鐘%s秒"%(re.tm_year - 1970,re.tm_mon - 1,re.tm_mday - 1,re.tm_hour,re.tm_min,re.tm_sec)) 11 12 # 方案二 13 diff_min = int(diff_cha//60) # 轉化成分 14 # print(diff_min) 15 diff_hour = int(diff_min // 60) # 轉換成小時 16 # print(diff_hour) 17 diff_day = int(diff_hour // 24) # 轉換成天 18 # print(diff_day) 19 20 diff_sec = int(diff_cha % 60) 21 # print(diff_sec) # 剩下的秒 46 22 23 diff_min1 = diff_min % 60 24 # print(diff_min1) # 剩下的分 59 25 26 diff_hour1 = diff_hour % 24 27 # print(diff_hour1) # 剩下的小時 20 28 29 print("時間差是%s天%s小時%s分%s秒"%(diff_day,diff_hour1,diff_min1,diff_sec))View Code
# random模塊
1 import random 2 3 print(random.random()) # (0,1)之間的隨機小數 4 print(random.randint(1,10)) # [1,10] 閉區間 隨機整數 5 print(random.uniform(3,10)) # (3,10)之間的隨機小數 6 7 print(random.randrange(1,10,2)) # [1,10) 切片 隨機每兩個取一個 8 9 print(random.choice([1,'李榮浩','周傑倫',['胡辣湯','疙瘩湯']])) # 隨機取一個 10 print(random.sample([1,'23',[4,5]],2)) # 列表元素任意兩個組合 11 12 lst = [1,2,3,4,5,6,7,8,9] 13 random.shuffle(lst) # 隨機打亂順序 14 print(lst)View Code
# os模塊
# 和系統操作相關的內容
1 import os 2 3 os.makedirs('dirname1/dirname2') # 創建文件夾目錄結構 4 os.removedirs('哈啊哈') # 刪除文件夾,如果文件夾內沒有東西,可以刪除,否則報錯 5 6 os.mkdir('dirname/哈哈') # 生成單級目錄 若父級目錄不存在會報錯 7 os.rmdir('dirname') # 刪除單級文件夾 若不是空的 報錯 inError 145] 目錄不是空的。: 'dirname' 8 9 print(os.listdir('../')) # 遞歸 列出指定⽬錄下的所有⽂件和⼦⽬錄,包括隱藏⽂件,並以列表⽅式列印 10 11 os.remove('xxx') # 刪除一個文件 12 os.rename('oldname','newname') # 重命名文件/目錄 13 14 15 os.stat('dirname') # 獲取文件信息 linux常用 16 # stat() 屬性解讀 17 # stat 結構: 18 # st_mode: inode 保護模式 19 # st_ino: inode 節點號。 20 # st_dev: inode 駐留的設備。 21 # st_nlink: inode 的鏈接數。 22 # st_uid: 所有者的⽤戶ID。 23 # st_gid: 所有者的組ID。 24 # st_size: 普通⽂件以位元組為單位的⼤⼩;包含等待某些特殊⽂件的數據。 25 # st_atime: 上次訪問的時間。 26 # st_mtime: 最後⼀次修改的時間。 27 # st_ctime: 由操作系統報告的"ctime"。在某些系統上(如Unix)是最新的元數據更改的時間,在 28 # 其它系統上(如Windows)是創建時間。View Code
1 import os 2 3 # os.system("dir") # 模擬命令行 直接執行命令 4 # s = os.popen('dir').read() # 運⾏shell命令,獲取執⾏結果 5 # print(s) 6 7 # print(os.getcwd()) # 獲取當前程式的目錄 8 # os.chdir() # 更改程式工作目錄 相當於 linux cdView Code
# path相關
1 # path相關 2 import os 3 print(os.path.abspath('dirname')) # 獲取絕對路徑 4 print(os.path.split('E:\Python_workspace\day021- 基本模塊1\dirname')) # 拆分路徑 5 print(os.path.dirname('E:\Python_workspace\day021- 基本模塊1\dirname')) # 返回上面拆分的第一個元素 6 print(os.path.basename('E:\Python_workspace\day021- 基本模塊1\dirname')) # 即返回上面拆分第二個元素 7 8 print(os.path.exists('E:\Python_workspace\day021- 基本模塊1\dirname')) # 看文件是否存在 存在True 不存在 False 9 print(os.path.isabs('xxx')) # 判斷是否是絕對路徑 10 11 print(os.path.isfile('xxx')) # 判斷是否文件 12 print(os.path.isdir('xxx')) # 判斷是否文件夾 13 14 print(os.path.join('path1[, path2[, ...]]')) # 拼接路徑 15 print(os.path.getatime('xxx')) # 文件或目錄最後訪問時間 16 print(os.path.getmtime('xxx')) # 文件或目錄最後修改時間 17 print(os.path.getsize('xxx')) # 返回 xxx 的大小View Code
# 特殊屬性
1 print(os.sep) # 文件分隔符 \\ / windows \\ linux / (重要) 2 print('c:'+os.sep+'王尼瑪') # 這樣寫多平臺可用 3 # 4 # os.linesep # 輸出當前平臺使⽤的⾏終⽌符,win下為"\r\n",Linux下為"\n" 5 # os.pathsep # 輸出⽤於分割⽂件路徑的字元串 win下為; ,Linux下為: (陪環境變數時用到) 6 7 print(os.name) # 輸出字元串指示當前使⽤平臺。win->'nt'; Linux->'posix' 判斷用戶使用系統View Code
# sys模塊
# 所有和python解釋器相關的都在sys模塊
1 import sys 2 3 print(sys.argv) # 命令⾏參數List,第⼀個元素是程式本身路徑(不常用) 4 5 # sys.exit(0) # 退出 類似 exit() 0正常退出 非0不正常 6 print(sys.version) # 獲取Python解釋器版本詳細信息 7 print(sys.platform) # 返回操作系統平臺名稱 8 9 10 print(sys.path) # 搜索模塊的路徑 11 # sys.path.append("E:/") # 若master不在sys的搜索路徑里可 .append('路徑') 添加到sys 一樣可調用 12 import master # master文件放在同目錄 是sys.path搜索的第一個元素 所有可調用 13 master.chi() # 胖虎很能吃View Code