时间相关模块
time 模块
在 Python 中,通常有这几种方式来表示时间:
- 时间戳 (timestamp) : 表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。
- 格式化的时间字符串(字符串时间) 如“2018-05-06”
- 元组 (struct_time) (结构化时间) : struct_time 元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)
常用函数
1. time()
返回当前时间戳,“type(time.time())”,返回的是 float 类型。
2. localtime([secs])
将一个时间戳转换为当前时区的 struct_time,即时间数组格式的时间。secs 参数未提供,则以当前时间为准。获取 localtime 返回数据的部分内容:
struct_time 对应的部分 | 含义 |
---|---|
tm_year | 年,如:1970 |
tm_mon | 月 1-12 |
tm_mday | 日 1-31 |
tm_hour | 时 0-23 |
tm_min | 分 0-59 |
tm_sec | 秒 0-59 |
tm_wday | 一周中得第几天 0-6 ,星期一是0,周日是6 |
tm_yday | 一年中得第几天 1-366 |
tm_isdst | 是否是夏令时 0、1、-1,默认 -1 |
3. gmtime([secs])
和 localtime() 方法类似,gmtime() 方法是将一个时间戳转换为 UTC 时区(0时区)的 struct_time。即返回当前的格林尼治时间的元组数值。
4. mktime(t)
将一个 struct_time 转化为时间戳。
5. asctime([t])
把一个表示时间的元组或者 struct_time 表示为这种形式:’Sun Jun 20 23:21:05 1993’。
6. ctime([secs])
把一个时间戳(按秒计算的浮点数)转化为 time.asctime() 的形式。如果参数未给或者为 None 的时候,将会默认 time.time() 为参数。它的作用相当于 time.asctime(time.localtime(secs))。
7. strftime(format[, t])
把一个代表时间的元组或者 struct_time(如由 time.localtime() 和 time.gmtime() 返回)转化为格式化的时间字符串。如果 t 未指定,将传入 time.localtime()。如果元组中任何一个元素越界,会被抛出 ValueError 的错误。
python中时间日期格式化符号:
符号 | 含义 |
---|---|
%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 | 当前时区的名称 |
%% | % 号本身 |
8. strptime(string[, format])
把一个字符串时间转化为 struct_time。实际上它和 strftime() 是逆操作。
9. sleep(secs)
线程推迟指定的时间运行,单位为秒。
10. 程序计时
Python 中内置的几种定时器如下:
定时器类型 | adjustable | implementation | monotonic | resolution |
---|---|---|---|---|
clock | False | clock() | True | 1e-06 |
monotonic | False | mach_absolute_time() | True | 1e-09 |
perf_counter | False | mach_absolute_time() | True | 1e-09 |
process_time | False | getrusage(RUSAGE_SELF) | True | 1e-06 |
time | True | gettimeofday() | False | 1e-06 |
adjustable: True 表示该时间可以由系统管理员进行更改,比如你手动设置时间
implement:表示该方法参数经由系统底层 C 函数获取
monotonic:True 表示时间不可以回退,反之
resolution:表示时间精度,类似于频率
clock 已经过时。time 因为可以由系统改变,不适合于测试时间差。
在不考虑程序中包含例如 time.sleep()
人为延迟的情况下(process_time 可以忽略这类延迟只计算 CPU 在线程上的工作时间),使用 perf_counter 可以获得更加准确的时间差。
示例
import time
t1 = time.time()
print(t1)
# Result: 1535440017.912516
t2 = time.localtime()
print(t2)
# Result: time.struct_time(tm_year=2018, tm_mon=8, tm_mday=28, tm_hour=15, tm_min=6, tm_sec=57, tm_wday=1, tm_yday=240, tm_isdst=0)
# 取结构化数据中的值
print(t2.tm_year)
# Result: 2018
t3 = time.gmtime()
print(t3)
# Result: time.struct_time(tm_year=2018, tm_mon=8, tm_mday=28, tm_hour=7, tm_min=6, tm_sec=57, tm_wday=1, tm_yday=240, tm_isdst=0)
print(time.mktime(t2))
# Result: 1535440017.0
print(time.asctime(t3))
# Result: Tue Aug 28 07:06:57 2018
print(time.ctime())
# Result: Tue Aug 28 15:06:57 2018
print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()))
# Result: 2018-08-28 15:06:57
print(time.strptime("2018/05/07 20:33:32","%Y/%m/%d %H:%M:%S"))
# Result: time.struct_time(tm_year=2018, tm_mon=5, tm_mday=7, tm_hour=20, tm_min=33, tm_sec=32, tm_wday=0, tm_yday=127, tm_isdst=-1)
print(time.sleep(2))
# Result: None
time 不同形式相互转换
datetime 模块
datatime 模块重新封装了 time 模块,提供更多接口,提供的类有:date, time, datetime, timedelta, tzinfo。
random 模块
产生随机数的模块
常用函数
1. random()
随机产生大于0且小于1之间的小数
2. uniform(a, b)
返回一个介于 a 和 b 之间的浮点数。一般是 a<b,即返回 a 和 b 之间的浮点数,如果 a 大于 b,则是 b 到 a 之间的浮点数。这里的 a 和 b 都有可能出现在结果中。
3. randint(a, b)
返回 range[a,b] 之间的一个整数。
4. randrage(start, stop[, step])
randrange(start, stop[, step]) 返回 range[start,stop) 之间的一个整数,start\stop 必须是整数,可加 step,跟 range(0,10,2) 类似。
5. choice(seq)
从非空序列 seq(字符串也是序列)中随机选取一个元素。如果 seq 为空则弹出 IndexError 异常。
6. sample(population, k)
从 population 样本或集合中随机选取 k 个不重复的元素组成新的序列。
7. shuffle()
将列表的顺序打乱。
示例
print(random.random())
# Result: 0.3250115730426676
print(random.uniform(1.1, 2.5))
# Result: 1.5995975114027763
print(random.randint(1, 3))
# Result: 2
print(random.randrange(1, 5, 2))
# Result: 3
print(random.choice([1,5,2,"ni",{"k1":"v1"},["hi",8]]))
# Result: 5
print(random.sample([1,5,2,"ni",{"k1":"v1"},["hi",8]],3))
# Result: [{'k1': 'v1'}, 5, 'ni']
li = [1,5,2,3]
print(random.shuffle(li))
# Result: None
print(li)
# Result: [5, 2, 3, 1]
string 模块
string 模块包含一些字符串常量
print(string.ascii_lowercase)
print(string.ascii_uppercase)
print(string.ascii_letters)
print(string.digits)
print(string.hexdigits)
print(string.octdigits)
print(string.punctuation)
print(string.printable)
运行结果:
abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789
0123456789abcdefABCDEF
01234567
!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
shutil 模块
常用函数
1. copyfileobj(fsrc, fdst[, length])
将文件内容拷贝到另一个文件中,需要用open()函数打开文件,注意会替换目标文件的所有内容,不是追加。
2. copyfile(src, dst)
复制文件内容到另外一个文件,不需要打开文件,事实上,copyfile 调用了 copyfileobj。
未完待续。。。
configparser 模块
configparse模块用于生成和修改,解析(读取分析,获得数据)常见配置文档,多数此类配置文件名格式为XXX.ini。
配置文件示例说明:
##### ini 文件示例 ########
[section1]
name = nicholas
age = 18
[section2]
name:python
age = 19
#### 文件格式说明 #########
[XXX] 代表节点
XX = XX 或者 XX : XX 代表参数
#支持的两种分隔符“=”, “:”