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 MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...