目录
前言
本文聚焦Python基础模块,它们是构建程序的基石,让代码结构清晰、执行高效。我们将深入探讨时间模块——
datetime
与time
,它们是时间管理的得力助手,无论是日志追踪、任务调度,还是复杂数据分析,都离不开它们的精准操控。
一、模块化使用
1.模块化简介
模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。模块可以被别的程序引入,以使用该模块中的函数等功能。
模块分类:
1. 标准库(内置模块) --自带
• time(用于处理日期和时间)、sys(用于操控python运行时的环境)、os(用于与操作系统交互,比如处理文件和目录)、json(用于处理json数据)、random等
2. 开源模块(第三方库) --下载
• xlrd,xlwt,openpyxl,flask等
3. 自定义模块
• 由编程人员自己写的模块。自定义模块时要注意命名,不能和Python的内置模块名称冲突
2.模块导入方式
模块导入:当跨模块调用时使用。要先导入模块,对于导入模板的语句一般放在程序前面,且按照Python标准库模块、Python第三方模块、自定义模块的顺序从上到下排开。
模块导入方式:
1.使用import导入:
• 导入语法:import 模块名
• 调用语法:模块名.函数名()
2.使用from...impor...导入:
• 导入语法:from 模块名 import 函数名1,函数2.....或者类名
• 调用语法:函数名1()
3.from ... import *(不推荐使用)
• 导入模块的所有函数。
• 通过这种方式引入的时候,当两个模块中含有相同名称函数的时候,后面一次引入会覆盖前一次引入。
二、标准库使用
1.time模块
Python编程中经常会用到time和datatime来处理日期和时间
时间的三种表示:
1. 时间戳 1970年1月1日之后的秒,即:time.time()
2. 格式化的字符串 2019-11-11 11:11, 即:time.strftime('%Y-%m-%d')
3. 结构化时间 元组包含了:年、日、星期等... time.struct_time 即:time.localtime()
time.struct_time(tm_year=2021, tm_mon=5, tm_mday=21, tm_hour=13, tm_min=37,
tm_sec=43, tm_wday=4, tm_yday=141, tm_isdst=0)
年、月、日、时、分、秒、一周的第几日、一年的第几日、夏令时
# 1:获取当前的时间戳
# 导入方式一
import time
print(time.time())
# >>>>>>>>>>>>>>>>>>>>>>>>
# 输出结果:
# 1716188230.1371763
# # 导入方式二
# from time import time
# print(time())
# >>>>>>>>>>>>>>>>>>>>>>>>
# 输出结果:
# 1716188230.1371763
# 2:格式化的字符串
print('字符串时间:', time.strftime('%Y-%m-%d'))
# >>>>>>>>>>>>>>>>>>>>>>>>
# 输出结果:
# 字符串时间: 2024-05-20
print('字符串时间:', time.strftime('%Y-%m-%d %H:%M:%S'))
# >>>>>>>>>>>>>>>>>>>>>>>>
# 输出结果:
# 字符串时间: 2024-05-20 22:00:00
# 3:结构化时间
print('结构化时间:', time.localtime())
# >>>>>>>>>>>>>>>>>>>>>>>>
# 输出结果:
# 结构化时间: time.struct_time(tm_year=2024, tm_mon=5, tm_mday=20, tm_hour=22, tm_min=00, tm_sec=00, tm_wday=0, tm_yday=141, tm_isdst=0)
print('获取年:', time.localtime().tm_year)
# >>>>>>>>>>>>>>>>>>>>>>>>
# 输出结果:获取年: 2024
2.time模块三种时间的转换
时间戳,格式化字符串和结构化时间互相转换
1. strftime()/asctime():结构化时间-格式化字符串时间
2. mktime():结构化时间-时间戳
3. localtime()/gmtime():时间戳-结构化时间
4. ctime():时间戳-格式化字符串时间
5. strpftime():格式化字符串时间-结构化时间
import time
# 结构化时间
t1 = time.localtime()
print('结构化时间-格式化字符串时间1:', time.strftime('%Y-%m-%d', t1))
print('结构化时间-格式化字符串时间2:', time.asctime(t1))
print('结构化时间-时间戳:', time.mktime(t1))
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#输出结果:
# 结构化时间-格式化字符串时间1: 2024-05-20
# 结构化时间-格式化字符串时间2: Mon May 20 15:29:16 2024
# 结构化时间-时间戳: 1716190156.0
# 格式化时间
t2 = time.strftime('%Y-%m-%d')
print('格式化字符串时间-结构化时间:', time.strptime(t2, '%Y-%m-%d'))
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#输出结果:
# 格式化字符串时间-结构化时间: time.struct_time(tm_year=2024, tm_mon=5, tm_mday=20, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=141, tm_isdst=-1)
# 时间戳
t3 = time.time()
print('时间戳-结构化时间1:', time.localtime(t3))
print('时间戳-结构化时间2:', time.gmtime(t3))
print('时间戳-格式化字符串时间:', time.ctime(t3))
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#输出结果:
# 时间戳-结构化时间1: time.struct_time(tm_year=2024, tm_mon=5, tm_mday=20, tm_hour=15, tm_min=29, tm_sec=16, tm_wday=0, tm_yday=141, tm_isdst=0)
# 时间戳-结构化时间2: time.struct_time(tm_year=2024, tm_mon=5, tm_mday=20, tm_hour=7, tm_min=29, tm_sec=16, tm_wday=0, tm_yday=141, tm_isdst=0)
# 时间戳-格式化字符串时间: Mon May 20 15:29:16 2024
3.datetime模块
datetime模块重新封装了time模块,提供更多接口,提供的类有date,time,datetime,timedelta等。
datetime模块中的datetime类
1.根据给定的值,创建时间元组:datetime.datime(年、月、日、时、分、秒、微秒)
dt=datetime.datetime(2018,6,24,16,56,45,13)
2.获取当前时间,datetime类中的today()或now()方法
dt=datetime.datetime.today() #获得当前时间datetime,不可以带参数
dt=datetime.datetime.now() #获得当前时间datetime ,可以带时区
import datetime
t1 = datetime.datetime.today() # 获得当前时间
print(t1)
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#输出结果:
# 2024-05-20 22:00:00.404865
t2 = datetime.datetime.now() # 获得当的时间
print(t2)
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#输出结果:
# 2024-05-20 22:00:00.404865
4.datetime截取
截取时间元组中的部分
dt=datetime.datetime.now()
1. dt.year #年
2. dt.month #月
3. dt.day #日
4. dt.date() #日期
5. dt.time() #时间
6. dt.weekday() #星期
7. dt.isoweekday() #星期
#是否夏令时(1是0不是)
import datetime
dt = datetime.datetime.now() # 根据给定时间来设置创建时间
print(dt)
#>>>>>>>>>>>>>>>>>>>>>>>>>>>
#输出结果:
# 2024-05-20 15:57:16.645733
# 时间截取,分别截取年、月、日、时、分、秒
year = dt.year
month = dt.month
day = dt.day
hour = dt.hour
minute = dt.minute
second = dt.second
print('{}年{}月{}日{}时{}分{}秒'.format(year, month, day, hour, minute, second))
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#输出结果:
# 2024年5月20日15时52分26秒
5.datetime之间的转换
1.把datetime转换成时间戳:当前时间.timestamp()
2.把时间戳转换成datetime:datetime.datetime.fromtimestamp(时间戳)
3.按datetime转换成字符串:
• dt.strftime("%Y-%m-%d") #dt:当前时间,datetime.datetime.today()
• dt.strftime("%Y-%m-%d %H:%M:%S")
4. 把字符串转换成datetime
• datetime.datetime.strptime('2015-6-1 18:19:59.10','%Y-%m-%d %H:%M:%S.%f')
import datetime
import time
# 1:把datetime转成时间戳
t1 = datetime.datetime.now() # 当前时间
print(t1.timestamp())
#>>>>>>>>>>>>>>>>>>>>>>>>>
# 1716192758.369642
# 2:把时间戳转换成datetime
t2 = time.time() # 时间戳
print(datetime.datetime.fromtimestamp(t2))
#>>>>>>>>>>>>>>>>>>>>>>>>>
# 2024-05-20 22:00:00.369642
# 3:把datetime转成字符串
t3 = datetime.datetime.now() # 当前时间
print(t3.strftime('%Y-%m-%d %H:%M:%S'))
print(t3.strftime('%Y-%m-%d'))
#>>>>>>>>>>>>>>>>>>>>>>>>>
# 2024-05-20 22:00:00
# 2024-05-20
# 4:把字符转成datetime
t4 = datetime.datetime.strptime('2015-6-1 18:19:59', '%Y-%m-%d %H:%M:%S')
print(t4)
#>>>>>>>>>>>>>>>>>>>>>>>>>
# 2015-06-01 18:19:59
6.calendar模块
导入calendar模块
1. 获取年历:calendar.calendar(2019)
2. 获取某年某月的日历:calendar.month(2019,12)
3. 是否闰年:calendar.isleap(2019)
import calendar
# 1:获取年历
c1 = calendar.calendar(2024)
print(c1)
#>>>>>>>>>>>>>>>>>>>>>>>>
# 2024
#
# 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
# 8 9 10 11 12 13 14 5 6 7 8 9 10 11 4 5 6 7 8 9 10
# 15 16 17 18 19 20 21 12 13 14 15 16 17 18 11 12 13 14 15 16 17
# 22 23 24 25 26 27 28 19 20 21 22 23 24 25 18 19 20 21 22 23 24
# 29 30 31 26 27 28 29 25 26 27 28 29 30 31
#。。。。。。。。。。
# 2:获取某年某月的日历
c2 = calendar.month(2024, 5)
print(c2)
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
# May 2024
# 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
# 3:是否闰年
c3 = calendar.isleap(2024)
print(c3)
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>
# True
7.自定义模块化使用
案例
1. 在demo1.py文件中定义1个函数,函数自定义。
2. 在demo2.py文件中引入demo模块,再调用定义的函数
注意:模块名的命名规范要符合标识符规范,多重目录用点分隔
总结
通过本文的介绍,我们深入了解了Python的基础模块和时间模块。这些模块不仅功能强大,而且易于使用,为开发者提供了极大的便利。无论是数据处理、文件操作还是时间管理,Python的模块库都能为我们提供强大的支持。