更新時(shí)間:2021年04月22日18時(shí)08分 來源:傳智教育 瀏覽次數(shù):
Python內(nèi)置了許多標(biāo)準(zhǔn)模塊,例如sys、os、random和time模塊等,下面為大家介紹幾個(gè)常用的標(biāo)準(zhǔn)模塊。
1.sys模塊
sys模塊中提供了一系列與Python解釋器交互的函數(shù)和變量,用于操控Python的運(yùn)行時(shí)環(huán)境。sys模塊中常用變量與函數(shù)如表1所示。
表1 sys模塊的常用變量與函數(shù)
變量/函數(shù) | 說明 |
---|---|
sys.argv | 獲取命令行參數(shù)列表,該列表中的第一個(gè)元素是程序自身所在路徑 |
sys.version | 獲取Python解釋器的版本信息 |
sys.path | 獲取模塊的搜索路徑,該變量的初值為環(huán)境變量PYTHONPATH的值 |
sys.platform | 返回操作系統(tǒng)平臺(tái)的名稱 |
sys.exit() | 退出當(dāng)前程序??蔀樵摵瘮?shù)傳遞參數(shù),以設(shè)置返回值或退出信息,正常退出返回值為0 |
(1)argv變量
通過import語句導(dǎo)入sys模塊,然后訪問argv變量獲取命令行參數(shù)列表,具體代碼如下:
import sys print(sys.argv)
運(yùn)行代碼,結(jié)果如下所示。
程序退出
2.os模塊
os模塊中提供了訪問操作系統(tǒng)服務(wù)的功能,該模塊中常用函數(shù)如表8-2所示。
表2 os模塊的常用函數(shù)
函數(shù) | 說明 |
---|---|
os.getcwd() | 獲取當(dāng)前工作路徑,即當(dāng)前Python腳本所在的路徑 |
os.chdir() | 改變當(dāng)前腳本的工作路徑 |
os.remove() | 刪除指定文件 |
os._exit() | 終止Python程序 |
os.path.abspath(path) | 返回path規(guī)范化的絕對(duì)路徑 |
os.path.split(path) | 將path分隔為形如(目錄,文件名)的二元組并返回 |
(1)getcwd()函數(shù)
通過os模塊中的getcwd()函數(shù)獲取當(dāng)前的工作路徑,示例代碼如下。
import os print(os.getcwd()) # 獲取當(dāng)前的工作路徑
運(yùn)行代碼,結(jié)果如下所示。
D:\Python項(xiàng)目\模塊使用
(2)exit()函數(shù)
os模塊中也有終止程序的函數(shù)——_exit(),該函數(shù)與sys模塊中的exit()函數(shù)略有不同。執(zhí)行os模塊中的exit()函數(shù)后,程序會(huì)立即結(jié)束,之后的代碼也不會(huì)再執(zhí)行;而執(zhí)行sys模塊中的exit()函數(shù)會(huì)引發(fā)一個(gè)SystemExit異常,若沒有捕獲該異常退出程序,后面的代碼不再執(zhí)行;若捕獲到該異常,則后續(xù)的代碼仍然會(huì)執(zhí)行。關(guān)于os和sys模塊的exit()函數(shù)的用法比較如下。
使用os模塊中的_exit()函數(shù)終止程序,示例代碼如下:
import os print("執(zhí)行_exit()之前") try: os._exit(0) print("執(zhí)行_exit()之后") except: print("程序結(jié)束")
運(yùn)行代碼,結(jié)果如下所示。
執(zhí)行_exit()之前
由以上結(jié)果可知,程序在執(zhí)行完“os._exit(0)”代碼后立即結(jié)束,不再執(zhí)行后續(xù)的代碼。
使用sys模塊中的exit()函數(shù)終止程序,示例代碼如下:
import sys print("執(zhí)行_exit()之前") try: sys.exit(0) print("執(zhí)行_exit()之后") except: print("程序結(jié)束")
運(yùn)行代碼,結(jié)果如下所示。
執(zhí)行_exit()之前 程序結(jié)束
由以上結(jié)果可知,程序執(zhí)行完“sys.exit(0)”代碼后沒有立即結(jié)束。由于try子句中捕獲了SystemExit異常,因此try子句后續(xù)的代碼不再執(zhí)行,而是繼續(xù)執(zhí)行異常處理except子句。
(3)chdir ()函數(shù)
os模塊中還提供了修改當(dāng)前工作路徑的chdir()函數(shù),示例代碼如下:
import os path = r"D:\Python項(xiàng)目\井字棋V1.0" # 查看當(dāng)前工作目錄 current_path = os.getcwd() print(f"修改前工作目錄為{current_path}") # 修改當(dāng)前工作目錄 os.chdir(path) # 查看修改后的工作目錄 current_path = os.getcwd() print(f"修改后工作目錄為{current_path}")
上述代碼首先使用getcwd()函數(shù)獲取當(dāng)前的工作路徑,然后通過chdir()函數(shù)修改了當(dāng)前的工作路徑。
運(yùn)行代碼,結(jié)果如下所示。
修改前工作目錄為D:\Python項(xiàng)目\模塊使用 修改后工作目錄為D:\Python項(xiàng)目\井字棋V1.0
3.random模塊
random模塊用于生成隨機(jī)數(shù),它提供了很多函數(shù)。接下來,針對(duì)常見的隨機(jī)數(shù)函數(shù)進(jìn)行講解,具體如下。
(1)random.random()
返回0與1之間的隨機(jī)浮點(diǎn)數(shù)N,范圍為0 <= N < 1.0。
接下來,通過一個(gè)案例來演示random()的使用,具體代碼如下所示:
import random # 生成第1個(gè)隨機(jī)數(shù) print("random():", random.random()) # 生成第2個(gè)隨機(jī)數(shù) print("random():", random.random())
運(yùn)行代碼,結(jié)果如圖1所示。
圖2運(yùn)行結(jié)果
(3)random.randint(a,b)
返回一個(gè)隨機(jī)的整數(shù)N,N的取值范圍為a <= N <= b。需要注意的是,a和b的取值必須為整數(shù),并且a的值一定要小于b的值,示例代碼如下:
import random # 生成的隨機(jī)數(shù)為N,N的取值范圍為12 <= N <= 20 print(random.randint(12, 20)) # 生成的隨機(jī)數(shù)為N,N的結(jié)果永遠(yuǎn)是20 print(random.randint(20, 20)) # print(random.randint(20, 10)) # 該語句是錯(cuò)誤的,下限(a)必須小于上限(b)。
運(yùn)行代碼,結(jié)果如圖3所示。
圖3 運(yùn)行結(jié)果
(4)random.randrange([start], stop[, step])
返回指定遞增基數(shù)集合中的一個(gè)隨機(jī)數(shù),基數(shù)默認(rèn)值為1。其中,start參數(shù)用于指定范圍內(nèi)的開始值,其包含在范圍內(nèi);end參數(shù)用于指定范圍內(nèi)的結(jié)束值,其不包含在范圍內(nèi);step表示遞增基數(shù)。
上述這些參數(shù)必須為整數(shù)。例如,random.randrange (10, 100, 2)相當(dāng)于從[10, 12, 14, 16, … 96, 98]序列中獲取一個(gè)隨機(jī)數(shù)。
(5)random.choice(sequence)
從sequence中返回一個(gè)隨機(jī)的元素。其中,sequence參數(shù)可以是列表、元組或字符串。示例代碼如下:
random.choice("學(xué)習(xí)Python") random.choice(["JGood","is", "a","handsome", "boy"]) random.choice(("Tuple","List", "Dict"))
需要注意的是,若sequence為空,則會(huì)引發(fā)IndexError異常。
(6)random.shuffle (x[,random])
用于將列表中的元素打亂順序,俗稱為洗牌。示例代碼如下:
demo_list = ["Python", "is", "powerful", "simple", "and so on..."] random.shuffle(demo_list) print(demo_list) # ---- 結(jié)果(不同機(jī)器上的結(jié)果可能不一樣。) # ['powerful', 'simple', 'is', 'Python', 'and so on...']
(7)random.sample(sequence,k)
從指定序列中隨機(jī)獲取k個(gè)元素作為一個(gè)片段返回,sample函數(shù)不會(huì)修改原有序列。示例代碼如下:
list_num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] slice = random.sample(list_num, 5) # 從list_num中隨機(jī)獲取5個(gè)元素,作為一個(gè)片斷返回 print(slice) print(list_num) # 原有序列并沒有改變。
4.time模塊
time模塊中提供了一系列處理時(shí)間的函數(shù),常用函數(shù)的說明如表3所示。
表3 time模塊的常用函數(shù)
函數(shù) | 說明 |
---|---|
time.time() | 獲取當(dāng)前時(shí)間,結(jié)果為實(shí)數(shù),單位為秒 |
time.sleep(secs) | 進(jìn)入休眠態(tài),時(shí)長(zhǎng)由參數(shù)secs指定,單位為秒 |
time.strptime(string[,format]) | 將一個(gè)時(shí)間格式(如:2019-02-25)的字符串解析為時(shí)間元組 |
time.localtime([secs]) | 以struct_time類型輸出本地時(shí)間 |
time.asctime([tuple]) | 獲取時(shí)間字符串,或?qū)r(shí)間元組轉(zhuǎn)換為字符串 |
time.mktime(tuple) | 將時(shí)間元組轉(zhuǎn)換為秒數(shù) |
strftime(format[, tuple]) | 返回字符串表示的當(dāng)?shù)貢r(shí)間,格式由format決定 |
(1)time()函數(shù)
通過time()函數(shù)獲取當(dāng)前的時(shí)間,利用此特性計(jì)算程序的執(zhí)行時(shí)間,示例代碼如下。
import time before = time.time() # 計(jì)算1000的10000次方 result = pow(1000, 10000) after = time.time() interval = after - before print(f"運(yùn)行時(shí)間為{interval}秒")
上述代碼首先導(dǎo)入了time模塊,使用time()函數(shù)獲取了當(dāng)前的時(shí)間,然后使用pow()函數(shù)計(jì)算1000的10000次方,在計(jì)算該結(jié)果時(shí)會(huì)產(chǎn)生一定的計(jì)算時(shí)間,計(jì)算結(jié)束后再次使用time()函數(shù)獲取當(dāng)前的時(shí)間,最后計(jì)算兩個(gè)時(shí)間的差值,以得到程序執(zhí)行的時(shí)間。
運(yùn)行代碼,結(jié)果如下所示。
運(yùn)行時(shí)間為0.0009999275207519531秒
(2)sleep()函數(shù)
如果在開發(fā)過程中需要對(duì)某個(gè)功能或某段代碼設(shè)置執(zhí)行時(shí)間間隔,那么可以通過sleep()函數(shù)實(shí)現(xiàn)。sleep()函數(shù)會(huì)讓程序進(jìn)入休眠,并可自由設(shè)定休眠時(shí)間。
接下來,通過一個(gè)示例來演示sleep()函數(shù)的用法,具體代碼如下。
import random, time name_li1 = ["李飛", "張羽", "趙韋", "王忠", "杜超"] name_li2 = [] for i in range(len(name_li1)): # 設(shè)置循環(huán)次數(shù) people = random.choice(name_li1) # 隨機(jī)選擇一個(gè)元素 name_li1.remove(people) # 為避免出現(xiàn)重復(fù)元素,移除已選擇元素 name_li2.append(people) # 添加到name_li2列表中 time.sleep(2) # 每隔2s執(zhí)行一次 print(f"此時(shí)的成員有{name_li2}")
上述代碼首先導(dǎo)入了random模塊與time模塊,然后定義了兩個(gè)列表name_li1與name_li2, 遍歷列表name_li1,調(diào)用choice()函數(shù)隨機(jī)選擇一個(gè)元素,并將隨機(jī)獲取的元素每隔2秒添加到列表name_li2中,直至全部添加。
運(yùn)行代碼,結(jié)果如下所示。
此時(shí)的成員有['張羽'] 此時(shí)的成員有['張羽', '趙韋'] 此時(shí)的成員有['張羽', '趙韋', '杜超'] 此時(shí)的成員有['張羽', '趙韋', '杜超', '王忠'] 此時(shí)的成員有['張羽', '趙韋', '杜超', '王忠', '李飛']
(3)strptime()函數(shù)與mktime()函數(shù)
如果在開發(fā)程序的過程中需要自定義時(shí)間戳,那么time模塊的strptime()函數(shù)與mktime()函數(shù)是最好的選擇,使用它們可以快速生成時(shí)間戳,具體代碼如下。
import time str_dt = "2019-02-25 17:43:54" # 轉(zhuǎn)換成時(shí)間數(shù)組 time_struct = time.strptime(str_dt, "%Y-%m-%d %H:%M:%S") # 轉(zhuǎn)換成時(shí)間戳 timestamp = time.mktime(time_struct) print(timestamp)
運(yùn)行代碼,結(jié)果如下所示。
1551087834.0
(4)strftime()函數(shù)
strftime()函數(shù)來格式化日期,其定義格式如下:
time.strftime(format[, t])
接下來,通過一個(gè)案例來演示strftime()函數(shù)的使用,具體代碼如下所示:
import time # 格式化成2016-03-20 11:45:39形式 print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())) # 格式化成Sat Mar 28 22:24:24 2016形式 print(time.strftime("%a %b %d %H:%M:%S %Y", time.localtime())) # 將格式字符串轉(zhuǎn)換為時(shí)間戳 time_word = "Sat Mar 28 22:24:24 2016" print(time.mktime(time.strptime(time_word, "%a %b %d %H:%M:%S %Y")))
運(yùn)行代碼,結(jié)果如圖4所示。
5.calendar模塊
calendar模塊有很廣泛的方法用來處理年歷和月歷,如打印某月的月歷,具體代碼如下所示:
import calendar calendar_january = calendar.month(2016, 1) print("以下輸出2016年3月份的日歷:") print(calendar_january)
運(yùn)行代碼,結(jié)果如圖5所示。
圖5運(yùn)行結(jié)果
除此之外,calendar模塊還提供了很多內(nèi)置函數(shù),具體如表4所示。
表4 calendar模塊的常見函數(shù)
序號(hào) | 函數(shù)和說明 |
---|---|
1 | calendar.calendar(year,w=2,l=1,c=6) 返回一個(gè)多行字符串格式的year年年歷,三個(gè)月一行,間隔距離為c。 每日寬度間隔為w字符。每行長(zhǎng)度為21* w+18+2* c。l是每星期行數(shù) |
2 | calendar.firstweekday( ) 返回當(dāng)前每周起始日期的設(shè)置。默認(rèn)情況下,首次載入calendar模塊時(shí)返回0,即星期一 |
3 | calendar.isleap(year) 是閏年返回True,否則為False |
4 | calendar.leapdays(y1,y2) 返回在y1,y2兩年之間的閏年總數(shù) |
5 | calendar.month(year,month,w=2,l=1) 返回一個(gè)多行字符串格式的year年month月日歷,兩行標(biāo)題,一周一行。每日寬度間隔為w字符。每行的長(zhǎng)度為7* w+6。l是每星期的行數(shù) |
6 | calendar.monthcalendar(year,month) 返回一個(gè)整數(shù)的單層嵌套列表。每個(gè)子列表裝載代表一個(gè)星期的整數(shù)。year年month月外的日期都設(shè)為0;范圍內(nèi)的日子都由該月第幾日表示,從1開始 |
7 | calendar.monthrange(year,month) 返回兩個(gè)整數(shù)。第1個(gè)是該月的星期幾的日期碼,第2個(gè)是該月的日期碼。日從0(星期一)~6(星期日),月份為1(1月)~12(12月) |
8 | calendar.prcal(year,w=2,l=1,c=6) 相當(dāng)于 print(calendar.calendar(year,w,l,c)) |
9 | calendar.prmonth(year,month,w=2,l=1) 相當(dāng)于 print(calendar.calendar(year, w, l, c)) |
10 | calendar.setfirstweekday(weekday) 設(shè)置每周的起始日期碼。0(星期一)~6(星期日) |
11 | calendar.timegm(tupletime) 和time.gmtime相反:接受一個(gè)時(shí)間元組形式,返回該時(shí)刻的時(shí)間輟(1970紀(jì)元后經(jīng)過的浮點(diǎn)秒數(shù)) |
12 | calendar.weekday(year,month,day) 返回給定日期的日期碼。0(星期一)~6(星期日)。月份為1(1月)~12(12月) |
猜你喜歡:
Python中常用的數(shù)據(jù)分析工具(模塊)有哪些?
北京校區(qū)