引入模塊的方式: 1. import 模塊 2. from xxx import 模塊 一、collections 模塊 1.Counter() counter是一個計數器,主要用來計數,計算一個字元串中每個字元出現的次數 1 from collections import Counter 2 s ...
引入模塊的方式:
1. import 模塊
2. from xxx import 模塊
一、collections 模塊
1.Counter()
counter是一個計數器,主要用來計數,計算一個字元串中每個字元出現的次數
1 from collections import Counter 2 s = "我要從南走到北,還要從北走到南" 3 4 ret = Counter(s) 5 print("__iter__" in dir(ret)) 6 7 for item in ret: 8 print(item,ret[item])counter
#補充
棧:先進後出
隊列:先進先出
由於python沒有給出Stack模塊. 我們可以自己動寫個粗略版本來模擬棧的工作過程(註意, 此版本有嚴重的併發問題)
1 #棧 先進後出 2 class StackFullErro(Exception): 3 pass 4 5 class StackEmptyErro(Exception): 6 pass 7 8 class Stack: 9 def __init__(self,size): 10 self.size = size 11 self.lst = [] 12 self.index = 0 13 14 def push(self,item): 15 if self.index == self.size: 16 raise StackFullErro("the Stack is full") 17 self.lst.insert(self.index,item) 18 self.index +=1 19 20 def pop(self): 21 if self.index == 0: 22 raise StackEmptyErro('the stack is empty') 23 self.index -= 1 24 item = self.lst.pop(self.index) 25 return item 26 27 s = Stack(4) 28 s.push('1') 29 s.push('2') 30 s.push('3') 31 s.push('4') 32 # s.push('5') 33 # s.push('6') 34 print(s.pop()) 35 print(s.pop()) 36 print(s.pop()) 37 print(s.pop()) 38 # print(s.pop()) 39 40 結果: 41 4 42 3 43 2 44 1棧
對於隊列,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 # print(q.get()) #拿完了,再拿程式就會阻塞 14 print('拿完了') 15 print(dir(queue)) 16 17 #雙向對列 18 q2 = queue.deque() #創建對象 19 q2.append("李") #在右邊添加 20 q2.appendleft("嘉") #在左邊添加 21 22 # print(q2.pop()) #從右邊拿 23 # print(q2.pop()) 24 25 print(q2.popleft()) #從左邊拿 26 print(q2.popleft())queue模塊
2、deque()
創建雙向隊列
from collections import deque q = deque() #創建雙向隊列對象 q.append("蓋倫") q.append('皇子') q.append('趙信') q.appendleft('德瑪西亞之力') q.appendleft('嘉文') q.appendleft('德邦總管') # 德邦 嘉文 德瑪 蓋倫 皇子 趙信 # print(q.pop()) # print(q.pop()) # print(q.pop()) print(q.popleft()) print(q.popleft()) print(q.popleft()) print(q.popleft())collections里的deque
3、nametuple
命名元組,就是給元組內的元素進行命名
1 from collections import namedtuple 2 3 point = namedtuple("點",['x','y','z']) #相當於寫了一個類 4 # print(namedtuple.__doc__) #Returns a new subclass of tuple with named fields. 5 p = point(5,2,1) #相當於創建對象 6 7 print(p.x) #5 8 print(p.y) #2 9 print(p.z) #1 10 print(p) #點(x=5, y=2, z=1) 給元組中每個元素命名了namedtuple
4、OrderedDict
排序字典,按我們存儲的順序給字典排序
1 dic = {'a':'娃哈哈', 'b':'薯條', 'c':'胡辣湯'} #無序的 2 print(dic) 3 4 from collections import OrderedDict 5 od = OrderedDict({'a':'娃哈哈', 'b':'薯條', 'c':'胡辣湯'}) #排序的 6 print(od)OrderedDict
5、defaultdict
預設值字典,查找key時,如果key不存在會返回一個預設值
1 from collections import defaultdict 2 3 lst = [11,22,33,44,55,66,77,88,99] 4 5 d = defaultdict(list) #當查找的key不存在是返回一個list(),並將key添 加到d中,所以參數必須是可調用的 6 #這相當於給每個key都有一個預設值list() 7 8 for el in lst: 9 if el <66: 10 d["kry1"].append(el) 11 else: 12 d["key2"].append(el) 13 14 print(d) 15 16 def fun(): 17 return "胡辣湯" 18 d2 = defaultdict(fun) #參數要callable 19 print(d2["key1"])defaultdict
二、time模塊
日期格式化的標準:(記到秒就行,其他看看)
%y 兩位數的年份表示(00-99)
%Y 四位數的年份表示(000-9999)
%m 月份(01-12)
%d 月內中的一天(0-31)
%H 24小時制小時數(0-23)
%I 12小時制小時數(01-12)
%M 分鐘數(00=59)
%S 秒(00-59)
%a 本地簡化星期名稱
%A 本地完整星期名稱
%b 本地簡化的月份名稱
%B 本地完整的月份名稱
%c 本地相應的日期表示和時間表示
%j 年內的一天(001-366)
%p 本地A.M.或P.M.的等價符
%U 一年中的星期數(00-53)星期天為星期的開始
%w 星期(0-6),星期天為星期的開始
%W ⼀年中的星期數(00-53)星期一為星期的開始
%x 本地相應的日期表示
%X 本地相應的時間表示
%Z 當前時區的名稱
%% %號本身
time模塊的方法:
時間戳 = time.time() 看當前的時間戳
格式化時間 = time.strftime(格式) 把時間戳轉為格式化形式
結構化時間 = time.localtime(時間戳) 將時間戳按當地時間結構化
結構化時間 = time.gmtime(時間戳) 將時間戳按格林尼治時間結構化
結構化時間 = time.strptime(s,格式) 把格式化時間轉為結構化形式
時間戳 = time.mktime(結構化) 把結構化時間轉為時間戳
#將時間戳格式化為當地時間
1 import time 2 3 t = time.localtime(1888888) #時間戳轉為當地結構化時間 4 # print(t) 5 str_time = time.strftime("%Y-%m-%d %H:%M:%S",t) 6 print(str_time)時間戳->當地時間
#將格式化時間轉化為時間戳
1 s = time.strftime("%Y-%m-%d %H:%M:%S") #按這種格式產生一個格式化時間 2 #print(s) 3 jiegou_time = time.strptime(s, "%Y-%m-%d %H:%M:%S") #按對應格式解構 4 #print(jiegou_time) 5 ss = time.mktime(jiegou_time) #將結構化時間轉為時間戳 6 print(ss)格式化時間->時間戳
#計算時間差
方式一:
1 import time 2 3 str1 ="2018-11-14 12:24:00" 4 str2 = "2018-11-14 14:58:03" 5 6 def diff_time(str1,str2): #傳入格式化時間 7 8 time_stamp1 = time.mktime(time.strptime(str1,"%Y-%m-%d %H:%M:%S")) #對應時間戳 9 time_stamp2 = time.mktime(time.strptime(str2,"%Y-%m-%d %H:%M:%S")) 10 cha =abs(time_stamp2 - time_stamp1) 11 shi, n = divmod(cha, 3600) 12 fen, miao = divmod(n, 60) 13 print("%s時:%s分:%s秒"%(int(shi), int(fen), int(miao))) 14 15 diff_time(str1,str2)View Code
方式二:
1 import time 2 str1 ="2018-11-14 12:24:00" 3 str2 = "2018-11-14 14:58:03" 4 5 g1 = time.strptime(str1,"%Y-%m-%d %H:%M:%S") 6 chuo1 = time.mktime(g1) #轉成對應時間戳 7 8 g2 = time.strptime(str2,"%Y-%m-%d %H:%M:%S") 9 chuo2 = time.mktime(g2) 10 11 cha = abs(chuo2-chuo1) #時間戳之差,秒 12 s = time.gmtime(cha) #將差轉為結構化時間 13 # print(s) 14 #減去起點時間 15 year = s.tm_year - 1970 16 month = s.tm_mon -1 17 day = s.tm_mday - 1 18 hour = s.tm_hour - 0 19 min = s.tm_min -0 20 second = s.tm_sec -0 21 22 print("%s-%s-%s %s:%s:%s" %(year,month,day,hour,min,second))View Code
三、random模塊
產生隨機數
import random
print(random.random()) # 0-1小數 (0, 1)
print(random.uniform(3, 10)) # 3-10小數(3,10)
print(random.randint(1, 10)) # 1-10整數 [1, 10]
print(random.randrange(1, 10, 2)) # 1-10奇數 [1,10)
print(random.choice([1, '周傑倫', ["蓋倫", "胡辣湯"]])) # 從列表中隨機選一個
print(random.sample([1, '23', [4, 5]], k)) # 列表元素隨機選k個
lst = [1, 2, 3, 4, 5, 6, 7, 8]
random.shuffle(lst) # 隨機打亂順序
print(lst)
四、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的屬性:
五、sys模塊
所有和python解釋器相關的都在sys模塊.
sys.argv 命令行參數List,第一個元素是程式本身路徑
sys.exit(n) 退出程式,正常退出時exit(0),錯誤退出sys.exit(1)
sys.version 獲取Python解釋程式的版本信息
sys.path 返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變數的值
sys.platform 返回操作系統平臺名稱