学科分类
目录
基础

常见的标准模块

Python内置了许多标准模块,例如sys、os、random和time模块等,下面为大家介绍几个常用的标准模块。

1.sys模块

sys模块中提供了一系列与Python解释器交互的函数和变量,用于操控Python的运行时环境。sys模块中常用变量与函数如表1所示。

表1 sys模块的常用变量与函数

变量/函数 说明
sys.argv 获取命令行参数列表,该列表中的第一个元素是程序自身所在路径
sys.version 获取Python解释器的版本信息
sys.path 获取模块的搜索路径,该变量的初值为环境变量PYTHONPATH的值
sys.platform 返回操作系统平台的名称
sys.exit() 退出当前程序。可为该函数传递参数,以设置返回值或退出信息,正常退出返回值为0

下面通过一些示例来演示sys模块中部分变量和函数的用法。

(1)argv变量

通过import语句导入sys模块,然后访问argv变量获取命令行参数列表,具体代码如下:

import sys
print(sys.argv)

运行代码,结果如下所示。

['D:/Python项目/模块使用/常用模块.py']

(2)exit()函数

sys模块的exit()函数的作用是退出当前程序,执行完此函数后,后续的代码将不再执行。示例代码如下:

import sys
sys.exit("程序退出")
print(sys.argv)

运行代码,结果如下所示。

程序退出

2.os模块

os模块中提供了访问操作系统服务的功能,该模块中常用函数如表8-2所示。

表2 os模块的常用函数

函数 说明
os.getcwd() 获取当前工作路径,即当前Python脚本所在的路径
os.chdir() 改变当前脚本的工作路径
os.remove() 删除指定文件
os._exit() 终止Python程序
os.path.abspath(path) 返回path规范化的绝对路径
os.path.split(path) 将path分隔为形如(目录,文件名)的二元组并返回

下面通过一些示例来演示os模块中部分函数的用法。

(1)getcwd()函数

通过os模块中的getcwd()函数获取当前的工作路径,示例代码如下。

import os
print(os.getcwd()) # 获取当前的工作路径

运行代码,结果如下所示。

D:\Python项目\块使用

(2)exit()函数

os模块中也有终止程序的函数——_exit(),该函数与sys模块中的exit()函数略有不同。执行os模块中的exit()函数后,程序会立即结束,之后的代码也不会再执行;而执行sys模块中的exit()函数会引发一个SystemExit异常,若没有捕获该异常退出程序,后面的代码不再执行;若捕获到该异常,则后续的代码仍然会执行。关于os和sys模块的exit()函数的用法比较如下。

使用os模块中的_exit()函数终止程序,示例代码如下:

import os
print("执行_exit()之前")
try:
    os._exit(0)
    print("执行_exit()之后")
except:
    print("程序结束")

运行代码,结果如下所示。

执行_exit()之前

由以上结果可知,程序在执行完“os._exit(0)”代码后立即结束,不再执行后续的代码。

使用sys模块中的exit()函数终止程序,示例代码如下:

import sys
print("执行_exit()之前")
try:
    sys.exit(0)
    print("执行_exit()之后")
except:
    print("程序结束")

运行代码,结果如下所示。

执行_exit()之前
程序结束

由以上结果可知,程序执行完“sys.exit(0)”代码后没有立即结束。由于try子句中捕获了SystemExit异常,因此try子句后续的代码不再执行,而是继续执行异常处理except子句。

(3)chdir ()函数

os模块中还提供了修改当前工作路径的chdir()函数,示例代码如下:

import os
path = r"D:\Python项目\井字棋V1.0"
# 查看当前工作目录
current_path = os.getcwd()
print(f"修改前工作目录为{current_path}")
# 修改当前工作目录
os.chdir(path)
# 查看修改后的工作目录
current_path = os.getcwd()
print(f"修改后工作目录为{current_path}")

上述代码首先使用getcwd()函数获取当前的工作路径,然后通过chdir()函数修改了当前的工作路径。

运行代码,结果如下所示。

修改前工作目录为D:\Python项目\块使用
修改后工作目录为D:\Python项目\字棋V1.0

3.random模块

random模块用于生成随机数,它提供了很多函数。接下来,针对常见的随机数函数进行讲解,具体如下。

(1)random.random()

返回0与1之间的随机浮点数N,范围为0 <= N < 1.0。

接下来,通过一个案例来演示random()的使用,具体代码如下所示:

import random
# 生成第1个随机数
print("random():", random.random())
# 生成第2个随机数
print("random():", random.random())

运行代码,结果如图1所示。

img

图1 运行结果

(2)random.uniform(a,b)

返回a与b之间的随机浮点数N,范围为[a, b]。如果a的值小于b的值,则生成的随机浮点数N的取值范围为a <= N <= b;如果a的值大于b的值,则生成的随机浮点数N的取值范围为b <= N <= a。示例代码如下:

import random
print("random:", random.uniform(50,100))
print("random:", random.uniform(100,50))

运行代码,结果如图2所示。

image-20200616135242291

图2运行结果

(3)random.randint(a,b)

返回一个随机的整数N,N的取值范围为a <= N <= b。需要注意的是,a和b的取值必须为整数,并且a的值一定要小于b的值,示例代码如下:

import random
# 生成的随机数为N,N的取值范围为12 <= N <= 20
print(random.randint(12, 20))
# 生成的随机数为N,N的结果永远是20
print(random.randint(20, 20))
# print(random.randint(20, 10))  # 该语句是错误的,下限(a)必须小于上限(b)。

运行代码,结果如图3所示。

img

​ 图3 运行结果

(4)random.randrange([start], stop[, step])

返回指定递增基数集合中的一个随机数,基数默认值为1。其中,start参数用于指定范围内的开始值,其包含在范围内;end参数用于指定范围内的结束值,其不包含在范围内;step表示递增基数。

上述这些参数必须为整数。例如,random.randrange (10, 100, 2)相当于从[10, 12, 14, 16, … 96, 98]序列中获取一个随机数。

(5)random.choice(sequence)

从sequence中返回一个随机的元素。其中,sequence参数可以是列表、元组或字符串。示例代码如下:

random.choice("学习Python")
random.choice(["JGood","is", "a","handsome", "boy"])
random.choice(("Tuple","List", "Dict"))

需要注意的是,若sequence为空,则会引发IndexError异常。

(6)random.shuffle (x[,random])

用于将列表中的元素打乱顺序,俗称为洗牌。示例代码如下:

demo_list = ["Python", "is", "powerful", "simple", "and so on..."] 
random.shuffle(demo_list) 
print(demo_list) 
# ---- 结果(不同机器上的结果可能不一样。) 
# ['powerful', 'simple', 'is', 'Python', 'and so on...'] 

(7)random.sample(sequence,k)

从指定序列中随机获取k个元素作为一个片段返回,sample函数不会修改原有序列。示例代码如下:

list_num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
slice = random.sample(list_num, 5) # 从list_num中随机获取5个元素,作为一个片断返回 
print(slice) 
print(list_num) # 原有序列并没有改变。 

4.time模块

time模块中提供了一系列处理时间的函数,常用函数的说明如表3所示。

表3 time模块的常用函数

函数 说明
time.time() 获取当前时间,结果为实数,单位为秒
time.sleep(secs) 进入休眠态,时长由参数secs指定,单位为秒
time.strptime(string[,format]) 将一个时间格式(如:2019-02-25)的字符串解析为时间元组
time.localtime([secs]) 以struct_time类型输出本地时间
time.asctime([tuple]) 获取时间字符串,或将时间元组转换为字符串
time.mktime(tuple) 将时间元组转换为秒数
strftime(format[, tuple]) 返回字符串表示的当地时间,格式由format决定

下面通过一些示例来演示time模块中部分函数的用法。

(1)time()函数

通过time()函数获取当前的时间,利用此特性计算程序的执行时间,示例代码如下。

import time
before = time.time()
# 计算1000的10000次方
result = pow(1000, 10000)
after = time.time()
interval = after - before
print(f"运行时间为{interval}秒")

上述代码首先导入了time模块,使用time()函数获取了当前的时间,然后使用pow()函数计算1000的10000次方,在计算该结果时会产生一定的计算时间,计算结束后再次使用time()函数获取当前的时间,最后计算两个时间的差值,以得到程序执行的时间。

运行代码,结果如下所示。

运行时间为0.0009999275207519531

(2)sleep()函数

如果在开发过程中需要对某个功能或某段代码设置执行时间间隔,那么可以通过sleep()函数实现。sleep()函数会让程序进入休眠,并可自由设定休眠时间。

接下来,通过一个示例来演示sleep()函数的用法,具体代码如下。

import random, time
name_li1 = ["李飞", "张羽", "赵韦", "王忠", "杜超"]
name_li2 = []
for i in range(len(name_li1)):    # 设置循环次数
    people = random.choice(name_li1) # 随机选择一个元素
    name_li1.remove(people)       # 为避免出现重复元素,移除已选择元素
    name_li2.append(people)       # 添加到name_li2列表中
    time.sleep(2)             # 每隔2s执行一次
    print(f"此时的成员有{name_li2}")

上述代码首先导入了random模块与time模块,然后定义了两个列表name_li1与name_li2, 遍历列表name_li1,调用choice()函数随机选择一个元素,并将随机获取的元素每隔2秒添加到列表name_li2中,直至全部添加。

运行代码,结果如下所示。

此时的成员有['张羽']
此时的成员有['张羽', '赵韦']
此时的成员有['张羽', '赵韦', '杜超']
此时的成员有['张羽', '赵韦', '杜超', '王忠']
此时的成员有['张羽', '赵韦', '杜超', '王忠', '李飞']

(3)strptime()函数与mktime()函数

如果在开发程序的过程中需要自定义时间戳,那么time模块的strptime()函数与mktime()函数是最好的选择,使用它们可以快速生成时间戳,具体代码如下。

import time
str_dt = "2019-02-25 17:43:54"
# 转换成时间数组
time_struct = time.strptime(str_dt, "%Y-%m-%d %H:%M:%S")
# 转换成时间戳
timestamp = time.mktime(time_struct)
print(timestamp) 

运行代码,结果如下所示。

1551087834.0

(4)strftime()函数

strftime()函数来格式化日期,其定义格式如下:

time.strftime(format[, t])

接下来,通过一个案例来演示strftime()函数的使用,具体代码如下所示:

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()))
# 将格式字符串转换为时间戳
time_word = "Sat Mar 28 22:24:24 2016"
print(time.mktime(time.strptime(time_word, "%a %b %d %H:%M:%S %Y")))

运行代码,结果如图4所示。

img

图4 运行结果

5.calendar模块

calendar模块有很广泛的方法用来处理年历和月历,如打印某月的月历,具体代码如下所示:

import calendar
calendar_january = calendar.month(2016, 1)
print("以下输出2016年3月份的日历:")
print(calendar_january)

运行代码,结果如图5所示。

img

图5运行结果

除此之外,calendar模块还提供了很多内置函数,具体如表4所示。

表4 calendar模块的常见函数

序号 函数和说明
1 calendar.calendar(year,w=2,l=1,c=6) 返回一个多行字符串格式的year年年历,三个月一行,间隔距离为c。 每日宽度间隔为w字符。每行长度为21* w+18+2* c。l是每星期行数
2 calendar.firstweekday( ) 返回当前每周起始日期的设置。默认情况下,首次载入calendar模块时返回0,即星期一
3 calendar.isleap(year) 是闰年返回True,否则为False
4 calendar.leapdays(y1,y2) 返回在y1,y2两年之间的闰年总数
5 calendar.month(year,month,w=2,l=1) 返回一个多行字符串格式的year年month月日历,两行标题,一周一行。每日宽度间隔为w字符。每行的长度为7* w+6。l是每星期的行数
6 calendar.monthcalendar(year,month) 返回一个整数的单层嵌套列表。每个子列表装载代表一个星期的整数。year年month月外的日期都设为0;范围内的日子都由该月第几日表示,从1开始
7 calendar.monthrange(year,month) 返回两个整数。第1个是该月的星期几的日期码,第2个是该月的日期码。日从0(星期一)~6(星期日),月份为1(1月)~12(12月)
8 calendar.prcal(year,w=2,l=1,c=6) 相当于 print(calendar.calendar(year,w,l,c))
9 calendar.prmonth(year,month,w=2,l=1) 相当于 print(calendar.calendar(year, w, l, c))
10 calendar.setfirstweekday(weekday) 设置每周的起始日期码。0(星期一)~6(星期日)
11 calendar.timegm(tupletime) 和time.gmtime相反:接受一个时间元组形式,返回该时刻的时间辍(1970纪元后经过的浮点秒数)
12 calendar.weekday(year,month,day) 返回给定日期的日期码。0(星期一)~6(星期日)。月份为1(1月)~12(12月)
点击此处
隐藏目录