常用模块
- calendar
- time
- datetime
- os
- shutil
- zip
- math
- string
- 上述使用理论上都应该先导入,string是特例
- calendar,time,datetime的区别参考中文意思
calendar
- 跟日历相关的模块
- calendar:获取一年的日历字符串
- 参数
- w = 每个日期之间的间隔字符数
- l = 每周所占用的行数
- c = 每个月之间的间隔字符数
In [6]:
#使用前先导入
import calendar
cal = calendar.calendar(2018)
print(cal)
print(type(cal))
2018 January February March Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 1 2 3 4 1 2 3 4 8 9 10 11 12 13 14 5 6 7 8 9 10 11 5 6 7 8 9 10 11 15 16 17 18 19 20 21 12 13 14 15 16 17 18 12 13 14 15 16 17 18 22 23 24 25 26 27 28 19 20 21 22 23 24 25 19 20 21 22 23 24 25 29 30 31 26 27 28 26 27 28 29 30 31 April May June Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 1 2 3 4 5 6 1 2 3 2 3 4 5 6 7 8 7 8 9 10 11 12 13 4 5 6 7 8 9 10 9 10 11 12 13 14 15 14 15 16 17 18 19 20 11 12 13 14 15 16 17 16 17 18 19 20 21 22 21 22 23 24 25 26 27 18 19 20 21 22 23 24 23 24 25 26 27 28 29 28 29 30 31 25 26 27 28 29 30 30 July August September Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 1 2 3 4 5 1 2 2 3 4 5 6 7 8 6 7 8 9 10 11 12 3 4 5 6 7 8 9 9 10 11 12 13 14 15 13 14 15 16 17 18 19 10 11 12 13 14 15 16 16 17 18 19 20 21 22 20 21 22 23 24 25 26 17 18 19 20 21 22 23 23 24 25 26 27 28 29 27 28 29 30 31 24 25 26 27 28 29 30 30 31 October November December Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 1 2 3 4 1 2 8 9 10 11 12 13 14 5 6 7 8 9 10 11 3 4 5 6 7 8 9 15 16 17 18 19 20 21 12 13 14 15 16 17 18 10 11 12 13 14 15 16 22 23 24 25 26 27 28 19 20 21 22 23 24 25 17 18 19 20 21 22 23 29 30 31 26 27 28 29 30 24 25 26 27 28 29 30 31 <class 'str'>
In [8]:
cal = calendar.calendar(2018,l = 0 ,c = 5)
print(cal)
2018 January February March Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 1 2 3 4 1 2 3 4 8 9 10 11 12 13 14 5 6 7 8 9 10 11 5 6 7 8 9 10 11 15 16 17 18 19 20 21 12 13 14 15 16 17 18 12 13 14 15 16 17 18 22 23 24 25 26 27 28 19 20 21 22 23 24 25 19 20 21 22 23 24 25 29 30 31 26 27 28 26 27 28 29 30 31 April May June Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 1 2 3 4 5 6 1 2 3 2 3 4 5 6 7 8 7 8 9 10 11 12 13 4 5 6 7 8 9 10 9 10 11 12 13 14 15 14 15 16 17 18 19 20 11 12 13 14 15 16 17 16 17 18 19 20 21 22 21 22 23 24 25 26 27 18 19 20 21 22 23 24 23 24 25 26 27 28 29 28 29 30 31 25 26 27 28 29 30 30 July August September Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 1 2 3 4 5 1 2 2 3 4 5 6 7 8 6 7 8 9 10 11 12 3 4 5 6 7 8 9 9 10 11 12 13 14 15 13 14 15 16 17 18 19 10 11 12 13 14 15 16 16 17 18 19 20 21 22 20 21 22 23 24 25 26 17 18 19 20 21 22 23 23 24 25 26 27 28 29 27 28 29 30 31 24 25 26 27 28 29 30 30 31 October November December Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 1 2 3 4 1 2 8 9 10 11 12 13 14 5 6 7 8 9 10 11 3 4 5 6 7 8 9 15 16 17 18 19 20 21 12 13 14 15 16 17 18 10 11 12 13 14 15 16 22 23 24 25 26 27 28 19 20 21 22 23 24 25 17 18 19 20 21 22 23 29 30 31 26 27 28 29 30 24 25 26 27 28 29 30 31
In [10]:
#isleap: 判断某一年是否为闰年
calendar.isleap(2000)
Out[10]:
True
In [14]:
#leapdays:获取指定年份之间的闰年个数
calendar.leapdays(2000,2018)# 包含左边不包含右边
Out[14]:
5
In [17]:
#mouth()获取某个月的日历字符串
#格式:calendar.month(2018,3)
m3 = calendar.month(2018,3)
print(m3)
March 2018 Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
In [19]:
# monthrange()获取一个月的周几开始和天数
#格式:calendar.monthrange(年,月)
#回值:元组(周几开始,总天数)
#注意:周默认0——6表示周一到周天
t = calendar.monthrange(2018,3)
print(t)
(3, 31)
In [22]:
# monthcalendar()获取一个月每天的矩阵列表
#格式:calendar.monthcalendar(年,月)
#回值:二级列表
#注意:矩阵中没有天数用0 表示
m = calendar.monthcalendar(2018,3)
print(m)
[[0, 0, 0, 1, 2, 3, 4], [5, 6, 7, 8, 9, 10, 11], [12, 13, 14, 15, 16, 17, 18], [19, 20, 21, 22, 23, 24, 25], [26, 27, 28, 29, 30, 31, 0]]
In [26]:
#prcal:直接打印日历
calendar.prcal(2018)
help(calendar.prcal)
2018 January February March Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 1 2 3 4 1 2 3 4 8 9 10 11 12 13 14 5 6 7 8 9 10 11 5 6 7 8 9 10 11 15 16 17 18 19 20 21 12 13 14 15 16 17 18 12 13 14 15 16 17 18 22 23 24 25 26 27 28 19 20 21 22 23 24 25 19 20 21 22 23 24 25 29 30 31 26 27 28 26 27 28 29 30 31 April May June Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 1 2 3 4 5 6 1 2 3 2 3 4 5 6 7 8 7 8 9 10 11 12 13 4 5 6 7 8 9 10 9 10 11 12 13 14 15 14 15 16 17 18 19 20 11 12 13 14 15 16 17 16 17 18 19 20 21 22 21 22 23 24 25 26 27 18 19 20 21 22 23 24 23 24 25 26 27 28 29 28 29 30 31 25 26 27 28 29 30 30 July August September Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 1 2 3 4 5 1 2 2 3 4 5 6 7 8 6 7 8 9 10 11 12 3 4 5 6 7 8 9 9 10 11 12 13 14 15 13 14 15 16 17 18 19 10 11 12 13 14 15 16 16 17 18 19 20 21 22 20 21 22 23 24 25 26 17 18 19 20 21 22 23 23 24 25 26 27 28 29 27 28 29 30 31 24 25 26 27 28 29 30 30 31 October November December Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 1 2 3 4 1 2 8 9 10 11 12 13 14 5 6 7 8 9 10 11 3 4 5 6 7 8 9 15 16 17 18 19 20 21 12 13 14 15 16 17 18 10 11 12 13 14 15 16 22 23 24 25 26 27 28 19 20 21 22 23 24 25 17 18 19 20 21 22 23 29 30 31 26 27 28 29 30 24 25 26 27 28 29 30 31 Help on method pryear in module calendar: pryear(theyear, w=0, l=0, c=6, m=3) method of calendar.TextCalendar instance Print a year's calendar.
In [27]:
#prmonth()直接打印整个月的日历
#格式:calendar.prmonth(年,月)
#返回值:无
calendar.prmonth(2019,1)
January 2019 Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
In [29]:
#weekday()获取周几
#格式:calendar.weekday(年,月,日)
#返回值:周几对应的数字
calendar.weekday(2019,1,4) #从0 开始代表周一
Out[29]:
4
time 模块
时间戳
- 一个时间的表示,根据不同的语言,可以是整数或者浮点数
- 是从1970年1月1日0时0分0秒到现在经历的秒数
- 如果是表示1970年以前或者更遥远的未来,可能出现异常
- 32位操作系统能够支持到2038年
UTC时间
- 世界标准时间
- 中国为UTC+8 东八分区
夏令时
- 夏天将时间调快一个小时
时间元组
一个包含时间内容的普通元组
字段 属性 值
4位年数 tm_year 2017
月 tm_mon 1到12
日 tm_mday 1到31
小时 tm_hour 0到23
分钟 tm_min 0到59
秒 tm_sec 0到61(60或61是润秒)
一周的第几日 tm_wday 0到6(0是周一)
一年的第几日 tm_yday 1到366,一年中的第几天
夏令时 tm_isdst 是否为夏令时,值为1时是夏令时,值为0时不是夏令时,默认为-1
In [30]:
#导入
import time
In [35]:
#时间模块的属性
#timezone :当前时区和UTC时间相差的秒数,在没有夏令时的情况下的间隔,东八区是-28800
#altzone:当前时区和UTC时间相差的秒数,在有夏令时的情况下的间隔
#daylight:测当前是否是夏令时时间状态,0代表是
print(time.timezone)
print(time.altzone)
print(time.daylight)
-28800 -28800 0
In [36]:
#得到时间戳
time.time()
Out[36]:
1545841360.1504376
In [38]:
#返回当前时间
t = time.localtime()
print(t)
print(t.tm_year)
time.struct_time(tm_year=2018, tm_mon=12, tm_mday=27, tm_hour=0, tm_min=24, tm_sec=14, tm_wday=3, tm_yday=361, tm_isdst=0) 2018
In [39]:
#asctime()返回元组的正常字符串化后的时间格式
t = time.localtime()
tt = time.asctime(t)
print(tt)
Thu Dec 27 00:25:58 2018
In [40]:
# ctime:获取字符串化的当前时间
t = time.ctime()
print(t)
Thu Dec 27 00:27:18 2018
In [41]:
#mktime()使用时间元组获取相应的时间戳
#格式: time.mktime(时间元组)
#返回值:浮点数时间戳
lt = time.localtime()
ts = time.mktime(lt)
print(type(ts))
print(ts)
<class 'float'> 1545841845.0
In [ ]:
#clock:获取CPU时间
In [45]:
#sleep:使进程进入睡眠状态,n秒后继续
for i in range(10):
print(i)
time.sleep(1)
0 1 2 3 4 5 6 7 8 9
In [60]:
print('hahahaha')
hahahaha
strftime:将时间元组转化为自定义字符串格式
-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 当前时区的名称
%% %号本身
In [51]:
#把时间格式表示成 年,月,日 时 的格式
t = time.localtime()
ft = time.strftime('%Y年%m月%d日 %H:%M',t)
print(ft)
2018年12月27日 00:49
datetime模块
- 提供日期和时间的运算和表达
- 常见属性
- datetime.data :提供年,月,日 属性
- datetime.time :hour,minute,sec等
- datetime.datetime:提供日期跟时间的组合
- datetime.timedelta:提供一个时间差,时间长度
In [57]:
import datetime
print(datetime.date(2018,3,3))
print(datetime.time(3,3,3))
2018-03-03 03:03:03
In [59]:
#datetime.timedelta
from datetime import datetime,timedelta
t1 = datetime.now()#得到当前时间
print(t1.strftime('%Y年%m月%d日 %H:%M'))
td = timedelta(hours = 1)#表示一个小时的时间间隔
print((t1 +td).strftime('%Y年%m月%d日 %H:%M'))
2018年12月27日 01:09 2018年12月27日 02:09
In [62]:
#测量程序运行时间间隔实验
t0 = time.time()
time.sleep(3)
t1 = time.time()
print(t1 - t0)
3.003554344177246
In [65]:
# timeit-时间测量工具
#生成列表的两种方式的比较
import timeit
c = '''
sum =[]
for i in range(1000):
sum.append(i)
'''
#利用timeit调用代码,执行100000次,查看运行时间
t1 = timeit.timeit(stmt='[i for i in range(1000)]',number = 100000)
#测量代码c 执行100000次运行结果
t2 = timeit.timeit(stmt=c,number=100000)
print(t1)
print(t2)
3.176306335022673 7.545649177976884
In [67]:
help(timeit.timeit)
Help on function timeit in module timeit: timeit(stmt='pass', setup='pass', timer=<built-in function perf_counter>, number=1000000, globals=None) Convenience function to create Timer object and call timeit method.
In [69]:
# 测量一个函数的执行时间
def Doit():
num = 3
for i in range(num):
print('This is {0}'.format(i))
#函数重复执行5次
t = timeit.timeit(stmt = Doit,number = 5)
print(t)
This is 0 This is 1 This is 2 This is 0 This is 1 This is 2 This is 0 This is 1 This is 2 This is 0 This is 1 This is 2 This is 0 This is 1 This is 2 0.02160664601251483
In [73]:
s = '''
def Doit(num):
for i in range(num):
print('This is {0}'.format(i))
'''#形如字符串,实际上还是代码
#执行Doit(num)
#setup负责把环境变量准备好,把num=3传入代码
t = timeit.timeit('Doit(num)',setup=s+'num=3',number = 5)
print(t)
#函数执行顺序
"""
首先定义函数:def Doit(num):
...
然后传入参数:num = 3
最后运行:Doit(num)
"""
This is 0 This is 1 This is 2 This is 0 This is 1 This is 2 This is 0 This is 1 This is 2 This is 0 This is 1 This is 2 This is 0 This is 1 This is 2 0.009518415026832372