目录
2.2 time库包含三类函数( 时间获取、时间格式化输出、程序计时 )
二、时间获取( time()、ctime()、gmtime() )
三、时间格式化( strftime()、strptime() )
四、程序计时( sleep()、perf_counter() )
一、time库基本介绍
1.1 time库功能、引用使用格式
time库是Python中处理时间的标准库之一,有如下的基本功能:
- 计算机时间的表达
- 获取系统时间并格式化输出
- 系统级精确计时,可用于程序分析
time库引用/使用的三种格式(库引用方法说明参考“Python初学2”第一章):
1. 法一(基本用法)
import time # 关键字import用于库引用
time.<函数名>(<函数参数>) # 使用:库名.函数名()
2. 法二(不常用用法)
from time import *
<函数名>(<函数参数>)
3. 法三(推荐用法)
import time as <库别名>
<库别名>.<函数名>(<函数参数>)
2.2 time库包含三类函数( 时间获取、时间格式化输出、程序计时 )
- 时间获取类:time()、ctime()、gmtime()
- 时间格式化输出类:strftime()、strptime()
- 程序计时类:sleep()、perf_counter()
二、时间获取( time()、ctime()、gmtime() )
时间获取类 | 说明 |
---|---|
time() | 功能:获取当前时间戳 返回值:浮点数 说明:1970年1月1日0:00至现在的时间,单位秒。使用示例如图2-1所示
|
ctime() | 功能:获取当前时间 返回值:字符串 说明:以人类易读的方式显示。使用示例如图2-2所示 |
gmtime() | 功能:获取当前时间 返回值:计算机内部时间变量类型 说明:表示为计算机可处理的时间格式。使用示例如图2-3所示 |
三、时间格式化( strftime()、strptime() )
时间格式化似于字符串格式化(字符串格式化说明参考“Python初学4”第五章),是将时间以合理的方式展示出来的方法,这就需要展示模板(由特定的格式化控制符组成,见表3-2)。
时间格式化输出类 | 说明 |
---|---|
strftime(tpl, ts) | 功能:将计算机内部时间变量转换成人类易读的时间形式 返回值:字符串 参数:tpl——格式化模板字符串,定义输出效果 ts——计算机内部时间变量类型 说明:使用示例如图3-1所示 |
strptime(str, tpl) | 功能:将时间字符串转换成计算机内部时间变量 返回值:计算机内部时间变量类型 参数:str——字符串形式的时间值 tpl——格式化模板字符串,定义输入效果 说明:使用示例如图3-2所示 |
格式化字符串 | 说明 | 可以显示值的范围 |
---|---|---|
%Y | 年份数字 | 0000 ~ 9999 |
%m | 月份数字 | 01、02、03、04、05、06、07、08、09、10、11、12 |
%B | 月份名称 | January、February、March、April、May、June、July、August、September、October、November、December |
%b | 月份名称缩写 | Jan、Feb、Mar、Apr、May、Jun、Jul、Aug、Sep、Oct、Nov、Dec |
%d | 日期数字 | 01 ~ 31 |
%A | 星期名称 | Monday、Tuesday、Wednesday、Thursday、Friday、Saturday、Sunday |
%a | 星期名称缩写 | Mon、Tue、Wed、Thu、Fri、Sat、Sun |
%H | 小时数字(24制) | 00 ~ 23 |
%I | 小时数字(12制) | 01 ~ 12 |
%p | 上/下午 | AM、PM |
%M | 分钟数字 | 00 ~ 59 |
%S | 秒数字 | 00 ~ 59 |
四、程序计时( sleep()、perf_counter() )
程序计时类 | 说明 |
---|---|
perf_counter() | 功能:精确计时 返回值:浮点数 说明:CPU级别的精确时间计数值,单位秒。由于计数起点未知,故连续调用做差值才有意义。使用示例如图4-1所示 |
sleep(s) | 功能:延时s秒时间 返回值:无 参数:s——延时时间,整数浮点数都可以,单位秒 说明:让程序休眠指定的时间,然后继续运行 |
五、“文本进度条”实例
5.1 简单进度条
问题分析:
- 采用字符串方式打印可以动态变化的文本进度条
- 采用 sleep() 函数模拟进度的停顿感
代码示例:
import time # 引用time库
scale = 30 # 定义文本进度条的总长度
print("--------执行开始--------")
for i in range(scale + 1): # 定义for循环,i从0到scale
a = "*" * i; # 将字符串*复制i次,用于显示已加载完的进度条
b = "." * (scale - i) # 将字符串.复制(scale - i)次,用于显示还未加载的进度条
c = (i / scale) * 100 # 计算进度条的进度百分比
print("{2:>3.0f}%[{0}->{1}]".format(a, b, c)) # 打印进度条
time.sleep(0.1) # 进度条以0.1秒为单位进行更新
print("--------执行结束--------")
数值操作符 / 和 * 参考“Python初学3”第二章。字符串操作符 * 参考“Python初学4”第二章。.format()格式化输出方法参考“Python初学4”第五章。
程序运行结果:
5.2 单行刷新
问题分析:
- 在上面效果的基础上,进度条需要能在一行中刷新变化(后打印的字符覆盖之前的字符)
- print()函数中使用字符 \r ,使光标回退到行首;使用 end="" 使打印完后的光标不自动换行。举例如下:
print(“\r{}”.format(a), end="")
# 字符串 \r 作用:打印前光标先置到行首
# end="" 作用:打印完之后,print() 函数不自动换行,即光标留在本行行尾
字符串的转义字符 \r \n \b 参考“Python初学4”第一章1.1节。
代码示例:
import time
scale = 30
print("执行开始".center(scale // 2, "-")) # 使用字符串 center() 处理方法,使字符串居中显示
start = time.perf_counter() # 记录进度条开始的时间点
for i in range(scale + 1):
a = "*" * i # 字符串*用于显示已加载完的进度条
b = "." * (scale - i) # 字符串.用于显示还未加载的进度条
c = (i / scale) * 100 # 计算进度条的进度百分比
dur = time.perf_counter() - start # 计算进度条的进度时间
print("\r{2:>3.0f}% [{0}->{1}] {3:^.2f}s".format(a, b, c, dur), end="") # \r 使打印前光标回到行首,结尾处的 end="" 使打印完光标不自动换行
time.sleep(0.1)
print("\n" + "执行结束".center(scale // 2, "-"))
字符串处理方法 str.center(width[, fillchar]) 参考“Python初学4”第四章。
程序运行结果: