Python系统学习第十七课

常用模块

  • calendar
  • time
  • datetime
  • timeit
  • os
  • shutil
  • zip
  • math
  • string
  • 上述模块使用理论上都因该先导入,string是特例
  • calender,time, datetime的区别参考中文意思

calendar

  • 跟日历相关 的模块
# 使用需要先导入
import calendar
#calendar:获取一年的日历字符串
#参数:
# w = 每个日期之间的间隔字符串
# l = 每周所占用的行数
# c = 每个月之间的间隔字符数
cal = calendar.calendar(2019)
print(type(cal))   #是字符串
print(cal)
<class 'str'>
                                  2019

      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                   1  2  3                   1  2  3
 7  8  9 10 11 12 13       4  5  6  7  8  9 10       4  5  6  7  8  9 10
14 15 16 17 18 19 20      11 12 13 14 15 16 17      11 12 13 14 15 16 17
21 22 23 24 25 26 27      18 19 20 21 22 23 24      18 19 20 21 22 23 24
28 29 30 31               25 26 27 28               25 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  2  3  4  5  6  7             1  2  3  4  5                      1  2
 8  9 10 11 12 13 14       6  7  8  9 10 11 12       3  4  5  6  7  8  9
15 16 17 18 19 20 21      13 14 15 16 17 18 19      10 11 12 13 14 15 16
22 23 24 25 26 27 28      20 21 22 23 24 25 26      17 18 19 20 21 22 23
29 30                     27 28 29 30 31            24 25 26 27 28 29 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  2  3  4  5  6  7                1  2  3  4                         1
 8  9 10 11 12 13 14       5  6  7  8  9 10 11       2  3  4  5  6  7  8
15 16 17 18 19 20 21      12 13 14 15 16 17 18       9 10 11 12 13 14 15
22 23 24 25 26 27 28      19 20 21 22 23 24 25      16 17 18 19 20 21 22
29 30 31                  26 27 28 29 30 31         23 24 25 26 27 28 29
                                                    30

      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                   1  2  3                         1
 7  8  9 10 11 12 13       4  5  6  7  8  9 10       2  3  4  5  6  7  8
14 15 16 17 18 19 20      11 12 13 14 15 16 17       9 10 11 12 13 14 15
21 22 23 24 25 26 27      18 19 20 21 22 23 24      16 17 18 19 20 21 22
28 29 30 31               25 26 27 28 29 30         23 24 25 26 27 28 29
                                                    30 31
cal = calendar.calendar(2017, l=0, c=5)
print(cal)
                                 2017

      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            1  2  3  4  5            1  2  3  4  5
 2  3  4  5  6  7  8      6  7  8  9 10 11 12      6  7  8  9 10 11 12
 9 10 11 12 13 14 15     13 14 15 16 17 18 19     13 14 15 16 17 18 19
16 17 18 19 20 21 22     20 21 22 23 24 25 26     20 21 22 23 24 25 26
23 24 25 26 27 28 29     27 28                    27 28 29 30 31
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  2      1  2  3  4  5  6  7               1  2  3  4
 3  4  5  6  7  8  9      8  9 10 11 12 13 14      5  6  7  8  9 10 11
10 11 12 13 14 15 16     15 16 17 18 19 20 21     12 13 14 15 16 17 18
17 18 19 20 21 22 23     22 23 24 25 26 27 28     19 20 21 22 23 24 25
24 25 26 27 28 29 30     29 30 31                 26 27 28 29 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  2         1  2  3  4  5  6                  1  2  3
 3  4  5  6  7  8  9      7  8  9 10 11 12 13      4  5  6  7  8  9 10
10 11 12 13 14 15 16     14 15 16 17 18 19 20     11 12 13 14 15 16 17
17 18 19 20 21 22 23     21 22 23 24 25 26 27     18 19 20 21 22 23 24
24 25 26 27 28 29 30     28 29 30 31              25 26 27 28 29 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            1  2  3  4  5                  1  2  3
 2  3  4  5  6  7  8      6  7  8  9 10 11 12      4  5  6  7  8  9 10
 9 10 11 12 13 14 15     13 14 15 16 17 18 19     11 12 13 14 15 16 17
16 17 18 19 20 21 22     20 21 22 23 24 25 26     18 19 20 21 22 23 24
23 24 25 26 27 28 29     27 28 29 30              25 26 27 28 29 30 31
30 31
#isleap:判断一年是否是闰年
calendar.isleap(2019)
False
#leapdays:获取指定年份之间的闰年的个数
calendar.leapdays(1001, 2019)
247
#month()获取某个月的日历字符串
#格式:calendar.month(年,月)
#回值:月日历的字符串
m3 = calendar.month(2018,12)
print(m3)
   December 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
#monthrange()获取一个月的周几开始即和总天数
#格式:calendar.monthrange(年, 月)
#回值:元组(周几开始,总天数)
#注意:周默认0-6,表示周一到周日
w,t = calendar.monthrange(2018,12)
print(w)
print(t)
5
31
#monthcalendar()返回一个月每天的矩阵列表
#格式:calendar.monthcalendar(年, 月)
#回值:二级列表
#注意:矩阵中美欧天数用0表示
w = calendar.monthcalendar(2018,12)
print(w)

[[0, 0, 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, 0, 0, 0, 0, 0]]
#prcal:直接打印日历
calendar.prcal(2018)
                                  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
#prmonth():直接打印镇个月的日历
#格式:calendar.prmonth(年,月)
#返回值:无
calendar.prmonth(2018,12)
   December 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
#weekday()获取周几
calendar.weekday(2018, 3, 26)
0

time 模块

时间戳

- 他是一个时间表示,根据不同的语言,可以是整点数,也可以是浮点数
- 是从1970年1月1日0时0分0秒到现在经历的秒数
- 如果表示时间是在1970年以前或者太遥远的未来,可能出现异常
- 32位操作系统能够支持到2038年

UTC时间

- 世界协调时间,世界标准时间
- 中国是东八区

夏令时

- 在夏天的时候将时间调快一小时

时间元组

- 一个包含时间内容的普通元组
- 可以查一下
#使用需要导入
import time
#时间模块的属性
#timezone:当前时区和UTC时间差的描述,在美欧夏令时的情况下的间隔,东八区的是-28800
#altzone:获取当天时区与UTC时间相差的秒数,在有夏令时的情况下,
#daylight:测当前是否是夏令时时间状态,0表示是
print(time.altzone)
print(time.daylight)
print(time.timezone)
-32400
0
-28800
#得到时间戳
time.time()
1546092906.13859
#获取当前时间,返回一个元组
#可通过点号操作得到相应的属性元素的内容
t = time.localtime()
print(t)
print(t.tm_hour)
time.struct_time(tm_year=2018, tm_mon=12, tm_mday=29, tm_hour=22, tm_min=17, tm_sec=11, tm_wday=5, tm_yday=363, tm_isdst=0)
22
#asctime()返回元组的正常字符串化之后的时间格式
#格式:time.asctime(时间元组)
#返回值:字符串 Tue jun 6 11:11:00 2017
t= time.localtime()
tt = time.asctime(t)
print(type(tt))
print(tt)
<class 'str'>
Sat Dec 29 22:20:11 2018
#ctime:获取字符串化的当前时间
t = time.ctime()
print(type(t))
print(t)
<class 'str'>
Sat Dec 29 22:21:57 2018
#mktime()使用时间元组获取对应的时间戳
#格式:time.mktime(时间元组)
#返回值:浮点数时间戳
lt = time.localtime()
ts = time.mktime(lt)
print(type(ts))
print(ts)
<class 'float'>
1546093537.0
#clock:获取CPU时间,3.0,-3.3版本直接使用,3.6调用有问题
#sleep:使程序进入睡眠,n秒后继续
for i in range(10):
    print(i)
    time.sleep(1)   #隔一秒打印
0
1
2
3
4
5
6
7
8
9
def p():
    time.sleep(2.5)
t0 = time.clock()
p()
time.sleep(3)
t1 = time.clock()
    
print(t1-t0)
5.500151156722717
#strftime:将时间元组转化为自定义的字符串格式
#把时间表示成 2018年3月25日 21:05
t = time.localtime()
print(t)
ft = time.strftime("%Y年%m月%d日 %H:%M",t)    #不知道为什么有问题
print(ft)
time.struct_time(tm_year=2018, tm_mon=12, tm_mday=29, tm_hour=22, tm_min=44, tm_sec=11, tm_wday=5, tm_yday=363, tm_isdst=0)



---------------------------------------------------------------------------

UnicodeEncodeError                        Traceback (most recent call last)

<ipython-input-48-15713b8e151c> in <module>()
      3 t = time.localtime()
      4 print(t)
----> 5 ft = time.strftime("%Y年%m月%d日 %H:%M",t)    #不知道为什么有问题
      6 print(ft)


UnicodeEncodeError: 'locale' codec can't encode character '\u5e74' in position 2: Illegal byte sequence

datetime 模块

  • datetime提供日期和时间的运算和表示
  • datetime.date:一个理想和的日期,提供year,month, day属性
import datetime
#datetime常见属性
#datyetime.date: 一个理想和的日期,提供year,month,day属性
dt = datetime.date(2018,12,29)
print(dt)
print(dt.day)
print(dt.year)
print(dt.month)

#datetime.time: 提供一个理想和的时间,
#datetime.dattime:提供日期跟时间的组合
#datetime.timedelta:提供一个时间差,时间长度

2018-12-29
29
2018
12
#datetime.datetime
from datetime import datetime
#常用类方法
#today
#now
#utcnow
#fromtimestamp:从时间戳中返回本地时间
dt = datetime(2018,12,29)
print(dt.today())
print(dt.now)
print(dt.fromtimestamp(time.time()))
2018-12-29 22:53:18.034889
<built-in method now of type object at 0x0000000071C12D90>
2018-12-29 22:53:18.034889
#datetime.timedelta
#表示一个时间间隔
from datetime import datetime, timedelta

t1 = datetime.now()
print(t1)
print(t1.strftime("%Y-%m-%d %H:%M:%S"))

#td表示以小时的时间间隔
td = timedelta(hours = 1)
#当前时间加上时间间隔后,吧得到的一个小时后的时间格式化输出
print((t1+td).strftime("%Y-%m-%d %H:%M:%S"))

2018-12-29 22:59:52.581487
2018-12-29 22:59:52
2018-12-29 23:59:52
# timeit 时间测量工具
# 测量程序运行时间间隔实验
def p():
    time.sleep(3.6)
t1 = time.time()
p()
print(time.time() - t1)
3.6005239486694336
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)
2.6333747479657177
6.393154442056584
#timeit  可以执行一个函数,来测量一个函数的执行时间
def do():
    num = 3
    for i in range(num):
        print("{0}".format(i))
        
#执行函数,重复100次
t = timeit.timeit(stmt=do, number = 10)
print(t)
0
1
2
0
1
2
0
1
2
0
1
2
0
1
2
0
1
2
0
1
2
0
1
2
0
1
2
0
1
2
0.0005944160629951512
s = '''
def do(num):
    num = 3
    for i in range(num):
        print("{0}".format(i))
'''
#执行do(num)
#setup负责把环境变量准备好
#实际相当于给timeit创造了一个小环境
# 在创作的小环境中,代码执行的顺序大致是
#
'''
def do(num):
    ....
num = 3
do(num)
'''
t = timeit.timeit("do(num)", setup = s +"num = 3",number = 10)
print(t)
0
1
2
0
1
2
0
1
2
0
1
2
0
1
2
0
1
2
0
1
2
0
1
2
0
1
2
0
1
2
0.0005736297316616401

猜你喜欢

转载自blog.csdn.net/qq_42633819/article/details/85692670