Python記錄_day21 模塊

来源:https://www.cnblogs.com/zhang-yl/archive/2018/11/14/9960201.html
-Advertisement-
Play Games

引入模塊的方式: 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 返回操作系統平臺名稱

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 反射reflection 可以大大提高程式的靈活性,使得interface{}有更大的發揮餘地 反射可以使用TypeOf和ValueOf函數從介面中獲取目標對象信息 反射會將匿名欄位作為獨立欄位(匿名欄位的本質) 想要利用反射修改對象狀態,前提是interface.data是settable,即po ...
  • 建立composer.json 執行 建立server.php 建立client.php 執行 結果 ...
  • 不定期更新使用到的比較好用的快捷鍵 全局修改 ctrl + alt + shift + J 局部修改 用法:alt + 滑鼠左鍵(拖動要修改的代碼) 註:游標停留在要修改內容範圍內,滑鼠左鍵按住再按alt,然後才拖動要修改的代碼,順序不能錯 查看源碼 ctrl + 滑鼠左鍵 刪除一行代碼 ctrl ...
  • 一、collections collections模塊主要封裝了一些關於集合類的相關操作。比如,iterable,Iteratort等等,除此之外,collections還提供了一些除基本數據類型以外的數據集合類型。Counter,deque,OrderDict,defaultdict以及named ...
  • 本節主要內容: 1.模塊的簡單認識 2.collections模塊 3.time時間模塊 4.random模塊 5.os模塊 6.sys模塊 一.模塊的簡單認識 模塊:就是我們把裝有特定功能的代碼進行歸類的結果. 引入模塊的方式 1.import 模塊 2.from xxx import 模塊 二. ...
  • Input Output 題意:給你一顆樹,選擇一個三個點構成的集合,使得這三個點不在一條直線上(意思就是 從一個點出發,用一條不回頭的線不能將這三個點連起來)問一共有多少個這樣的集合 思路 :先求出一共有多少個集合,就是Cn3 (n-2)*(n-1)*n/6 ; 然後再求不符合條件的個數 求不符合 ...
  • 本項目是一個通用響應式管理後臺,導入開發環境安裝就能直接運行,界面也非誠漂亮,在PC端和移動端也是自適應的。非常適合企業或者個人搭建各種商城後臺,博客後臺,網站管理後臺等。 源碼啟動後的截圖 需要這套源碼的朋友聯繫作者微信(同電話):18629374628 ...
  • 一.ORM欄位 | 類型 | 說明 | | | | | AutoField | 一個自動增加的整數類型欄位。通常你不需要自己編寫它,Django會自動幫你添加欄位:\ ,這是一個自增欄位,從1開始計數。如果你非要自己設置主鍵,那麼請務必將欄位設置為\ 。Django在一個模型中只允許有一個自增欄位, ...
一周排行
    -Advertisement-
    Play Games
  • 基於.NET Framework 4.8 開發的深度學習模型部署測試平臺,提供了YOLO框架的主流系列模型,包括YOLOv8~v9,以及其系列下的Det、Seg、Pose、Obb、Cls等應用場景,同時支持圖像與視頻檢測。模型部署引擎使用的是OpenVINO™、TensorRT、ONNX runti... ...
  • 十年沉澱,重啟開發之路 十年前,我沉浸在開發的海洋中,每日與代碼為伍,與演算法共舞。那時的我,滿懷激情,對技術的追求近乎狂熱。然而,隨著歲月的流逝,生活的忙碌逐漸占據了我的大部分時間,讓我無暇顧及技術的沉澱與積累。 十年間,我經歷了職業生涯的起伏和變遷。從初出茅廬的菜鳥到逐漸嶄露頭角的開發者,我見證了 ...
  • C# 是一種簡單、現代、面向對象和類型安全的編程語言。.NET 是由 Microsoft 創建的開發平臺,平臺包含了語言規範、工具、運行,支持開發各種應用,如Web、移動、桌面等。.NET框架有多個實現,如.NET Framework、.NET Core(及後續的.NET 5+版本),以及社區版本M... ...
  • 前言 本文介紹瞭如何使用三菱提供的MX Component插件實現對三菱PLC軟元件數據的讀寫,記錄了使用電腦模擬,模擬PLC,直至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1. PLC開發編程環境GX Works2,GX Works2下載鏈接 https:// ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • 1、jQuery介紹 jQuery是什麼 jQuery是一個快速、簡潔的JavaScript框架,是繼Prototype之後又一個優秀的JavaScript代碼庫(或JavaScript框架)。jQuery設計的宗旨是“write Less,Do More”,即倡導寫更少的代碼,做更多的事情。它封裝 ...
  • 前言 之前的文章把js引擎(aardio封裝庫) 微軟開源的js引擎(ChakraCore))寫好了,這篇文章整點js代碼來測一下bug。測試網站:https://fanyi.youdao.com/index.html#/ 逆向思路 逆向思路可以看有道翻譯js逆向(MD5加密,AES加密)附完整源碼 ...
  • 引言 現代的操作系統(Windows,Linux,Mac OS)等都可以同時打開多個軟體(任務),這些軟體在我們的感知上是同時運行的,例如我們可以一邊瀏覽網頁,一邊聽音樂。而CPU執行代碼同一時間只能執行一條,但即使我們的電腦是單核CPU也可以同時運行多個任務,如下圖所示,這是因為我們的 CPU 的 ...
  • 掌握使用Python進行文本英文統計的基本方法,並瞭解如何進一步優化和擴展這些方法,以應對更複雜的文本分析任務。 ...
  • 背景 Redis多數據源常見的場景: 分區數據處理:當數據量增長時,單個Redis實例可能無法處理所有的數據。通過使用多個Redis數據源,可以將數據分區存儲在不同的實例中,使得數據處理更加高效。 多租戶應用程式:對於多租戶應用程式,每個租戶可以擁有自己的Redis數據源,以確保數據隔離和安全性。 ...