概念:封装思想,为了解决代码难维护的问题,可以将很多相似的功能的函数进行分组,分别放到不同的包下,这样每个包下的内容较少,寻找不同的功能相对较快,提高工作效率
注意:一个.py文件就是一个模块
一个标准的模中包含的内容:变量,函数,类
- 优点
- 提高代码的可维护性
- 提高代码的复用性【当一个模块完成之后,可以在不同的位置使用】
- 引用其他第三方的模块
- 避免变量,函数和类的命名冲突
系统常用的模块
- time时间模块:time()、gmtime()、localtime()、mktime()、asctime()、ctime()、strptime()、strftime()、休眠
采用的标准:格林威治时间,世界标准时间
时间的表示形式:
a.时间戳
以整型或者浮点型表示的一个以秒为单位的时间间隔,这个事件的基础值是1970.1.1 00:00:00
b.元组格式
9个整型数据
c.格式化的时间字符串
%Y:年 %m:月 %d:日 %H:24小时 %h:12小时制 %M:分 %S:秒
时间模块的练习一:
import time #1.time():返回当前时间戳,浮点型 c = time.time() print(c) #1557200388.3558068 #2.gmtime(参数):将时间戳转换为标准时间,结构体,关于元组的表示 g = time.gmtime(c) print(g) #time.struct_time(tm_year=2019, tm_mon=5, tm_mday=7, tm_hour=3, tm_min=39, tm_sec=48, tm_wday=1, tm_yday=127, tm_isdst=0) #3.localtime(参数):将时间戳转换为本地时间,结构体,关于元组的表示,本地时间和标准时间相差8小时 l = time.localtime(c) print(l) #time.struct_time(tm_year=2019, tm_mon=5, tm_mday=7, tm_hour=11, tm_min=42, tm_sec=27, tm_wday=1, tm_yday=127, tm_isdst=0) #4.mktime():将元组9位形式转换为时间戳 m = time.mktime(l) print(m) #1557200682.0 print(time.mktime((2019,5,7,11,46,53,0,21,0))) #1557200813.0 #5.asctime():将时间元组表示形式转换为字符串【根据时间元组,生成一个人类可读时间】 a = time.asctime(l) print(a) #Tue May 7 16:24:44 2019 #6.ctime():将浮点型时间戳转换为字符串【根据时间戳,生成一个人类可读时间】 c1 = time.ctime(c) print(c1) #Tue May 7 16:26:31 2019 #7.strptime():将指定格式的字符串转换为指定的元组 time1 = "2019-5-7 16:28:20" #需要被解析的时间字符串 格式化字符串 s1 = time.strptime(time1,"%Y-%m-%d %H:%M:%S") print(s1) #time.struct_time(tm_year=2019, tm_mon=5, tm_mday=7, tm_hour=16, tm_min=28, tm_sec=20, tm_wday=1, tm_yday=127, tm_isdst=-1) #8.strftime():将时间元组转化为格式化字符串 #参数:格式化字符串 时间元组 s2 = time.strftime("%Y.%m.%d",l) print(s2) #2019.05.07 #9.休眠:将当前程序阻塞,时间为自行设定的秒数时间,多线程中使用较多 #参数:秒数 time.sleep(2)
时间模块练习二:已知字符串“2019-05-07”,输出“2019-05-10”
time1 = "2019-05-07" print(time1) #将对应时间字符串转换为时间戳 time2 = time.strptime(time1,"%Y-%m-%d") #将时间字符串解析为时间元组 time3 = time.mktime(time2) #将时间元组解析为时间戳 #计算3天之后的时间戳 time31 = time3 + 3 * 24 *3600 #将时间戳转换为字符串 time4 = time.localtime(time31) #将时间戳转换为时间元组 time5 = time.strftime("%Y-%m-%d",time4) #将时间元组解析为时间字符串 print(time5)
- datetime日期模块:now()、datetime()、strftime()、strptime()、时间相减
基于time模块的再次封装
import datetime #1.now():获取当前时间 d1 = datetime.datetime.now() #包名.模块名.函数名 print(d1) #2019-05-07 17:07:27.732679 #2.datetime():获取指定时间 d2 = datetime.datetime(2019,5,7,16,58,2,146) print(d2) #2019-05-07 16:58:02.000146 #3.strftime():格式化时间字符串 d3 = d1.strftime("%Y.%m.%d") print(d3) #2019.05.07 #4.strptime():与strftime()相对应 d4 = datetime.datetime.strptime(d3,"%Y.%m.%d") print(d4) #2019-05-07 00:00:00 #5.时间相减,得到的是时间间隔 datetime1 = datetime.datetime(2019,5,7,14,58,2,146) datetime2 = datetime.datetime(2019,5,9,16,58,2,146) newtime = datetime2 - datetime1 print(newtime) #2 days, 0:00:00 print(newtime.days) #2 print(newtime.seconds) #7200
- calendar日历模块:month()、monthcalendar()、calendar()、isleap()、leapdays()、weekday
作用:处理万年历
import calendar #返回指定年的某月 print(calendar.month(2019,5)) #返回一个二维列表,任然是一个万年历 print(calendar.monthcalendar(2019,5)) ''' [[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]] ''' #返回指定年的日历 print(calendar.calendar(2019)) #判断某一年是否是闰年 print(calendar.isleap(2012)) #True #返回两个年份之间闰年的总数 print(calendar.leapdays(2000,2020)) #5 #返回周的日期,0【星期一】~6【星期日】,月份1~12 print(calendar.weekday(2019,5,7)) #1
- os模块系统模块:os、os.path
包含普通的操作文件或者文件夹的功能
import os #属性,获取操作系统的名称 nt代表window操作系统,posix代表Linux,Unix或者mac os操作系统 print(os.name) #nt #获取环境变量 print(os.environ) print(os.environ.get("APPDATA")) #获取当前目录 print(os.curdir) #. #函数 #1.获取指定目录下所有的文件以及文件夹,返回的结果为一个列表,列表中的元素是文件或者文件夹的名称的字符串 print(os.listdir(r"E:\Python学习\1py基础\Day9")) #['代码', '作业', '笔记', '视频'] #2.在指定的目录下创建目录 os.mkdir("abc111") #相对路径 os.mkdir(r"E:\Python学习\1py基础\Day9\aaa") #绝对路径 #3.删除目录 os.rmdir("abc111") #4.获取文件的属性 print(os.stat(r"E:\Python学习\1py基础\Day9\aaa")) #5.给文件或者文件夹重命名,注意:此时文件是关闭状态 #参数: old new os.rename("abc111","python") #6.删除文件 os.remove("abc111.py")
#os.path #1.路径的拼接 path1 = r"E:\Python学习\1py基础" path2 = r"Day9\代码" print(os.path.join(path1,path2)) #E:\Python学习\1py基础\Day9\代码 #2.路径的拆分,返回结果是元组,默认拆分一级目录 path3 = r"E:\Python学习\1py基础\Day9\代码" print(os.path.split(path3)) #('E:\\Python学习\\1py基础\\Day9', '代码') #获取扩展名,如果没有扩展名,则获取的是一个元组,元组中的第一个元素为空 path4 = r"E:\Python学习\1py基础\Day9\代码\Day9Code\decoratorDemo01.py" print(os.path.splitext(path4)) #('E:\\Python学习\\1py基础\\Day9\\代码\\Day9Code\\decoratorDemo01', '.py') #3.判断一个指定的路径是否是目录 print(os.path.isdir(path3)) #True #判断一个指定路径是否是文件 print(os.path.isfile(path3)) #4.判断指定的路径是否存在 print(os.path.exist(path3)) #5.获取文件的大小【字节】 print(os.path.getsize(path3)) #6.关于文件的目录,将父路径和子路径合在一起,就是整个目录 print(os.path.dirname(path3)) #拿到父路径 print(os.path.basename(path3)) #拿到子路径
练习:获取指定目录下所有的.py或者.txt文件
#a.先判断给定目录是否存在 #b.获取指定目录下所有的文件和文件夹 #c.拼接路径,并判断拼接后的文件是否是文件 #d.筛选出.py和.txt文件 def getFile(path): #a if os.path.exists(path): #b. fileList = os.listdir(path) #遍历列表 for fileName in fileList: filePath = os.path.join(path,fileName) #d if os.path.isfile(filePath): if fileName.endswith(".py") or fileName.endswith(".txt"): #endswith获取后缀名 print(fileName) else: print(fileName,"不是文件") else: print("该路径不存在") getFile(r"E:\Python学习\1py基础\Day9\作业")