一、包和模块
1.包
包【package】是一种管理 Python 模块命名空间的形式,采用"点模块名称"
就好像使用模块的时候,你不用担心不同模块之间的全局变量相互影响一样,采用点模块名称这种形式也不用担心不同库之间的模块重名的情况
"""
package本质是一个文件夹【目录】,但是特殊之处在于:该文件夹下有一个文件__init__.py,
代表初始化,但是前期空的,后期在项目开发中,会在其中书写一些项目的配置信息。
注意:实际上,一个py文件就是一个模块,一个模块名包括包名
如:import aaa.file ,aaa表示包名或者目录名。file是文件名,二者同时组成了一个模块名
"""
2.自定义模块
模块的优点:
- 提高代码的可维护性
- 提高了代码的复用度,当一个模块书写完毕,可以被多个地方引用
- 引用其他的模块
- 避免函数名和变量名的命名冲突
# 一、import
# 1.import 包1.包2....py文件名
# 方式一:分别导入
import aaa.module
import bbb.module
# 方式二:一起导入
import aaa.module,bbb.module
import math,string,random
# 访问模块中的变量和调用函数
print(aaa.module.num)
print(bbb.module.num)
aaa.module.func()
bbb.module.func()
"""
好处:可以区分不同模块中同名的变量,函数或类
缺点:一个模块中的变量或函数较多,如果都需要访问,每次访问需要声明模块的路径
"""
# 2.import 包1.包2....py文件名 as 别名
import ccc.d1.text as c1
import ccc.d2.text as d1
print(c1.c)
print(d1.d)
# 二、from import
# 1.from 包1.包2....py文件名 import 变量名/函数名/类名
from aaa.module import num,func
from bbb.module import num,func
# def func():
# print("showing")
# 访问模块中的变量和调用函数,无需声明模块的路径
print(num)
func()
"""
好处:当访问变量或调用函数的时候,无需多次声明模块的路径
缺点:如果当多个模块中出现同名的变量,函数或者类,当访问的时候,则会出现覆盖问题,后导入的会覆盖掉之前导入的
"""
# 2.from 包1.包2....py文件名 import *:从指定模块中导入所有内容
from ccc.d1.text import *
from ccc.d2.text import *
print(c)
print(d)
3.系统模块
3.1time模块
1>名词解释
UTC,格林威治天文时间,世界标准时间,在中国为UTC+8
DST:夏令时,表示时间的显示格式
2>时间的表示形式
a.时间戳
以整型或浮点型表示的是一个以秒为单位的时间间隔,这个时间的基础值是1970.1.1的零点开始算起
b.时间元组格式
采用Python的数据结构表示,这个元组有9个整型内容,分别表示不同的含义
c.格式化的时间字符串(主要用圈中的几种)
d.时间的三种表示形式之间的相互转化
from time import *
# 1.time():获取当前时间的时间戳 ******
t1 = time()
print(t1)
# 2.gmtime():获取当前的UTC,为元组形式
t2 = gmtime()
print(t2)
# 3.localtime():获取当地时间,,为元组形式 ******
t3 = localtime()
print(t3)
# 4.mktime():将时间的元组形式转换为时间戳
t4 = mktime(t3)
print(t4)
# 5.ctime():将时间戳转换为时间的字符串,默认格式
t5 = ctime(t1)
print(t5) # Sat Aug 14 21:50:39 2021
# 6.asctime()将时间元组形式转换为时间的字符串,默认格式
t6 = asctime(t3)
print(t6) # Sat Aug 14 21:52:17 2021
# 7.strftime():将时间的元组形式转换为时间的字符串,可以自定义格式 *****
# %Y:year %m:month %d:day %H:hour %M:minutes %S:seconds
t7 = strftime("%Y.%m.%d",t3)
print(t7) # 2021.08.14
t7 = strftime("%Y.%m.%d %H:%M:%S",t3)
print(t7) # 2021.08.14 21:55:07
t7 = strftime("%Y/%m/%d %H:%M:%S",t3)
print(t7) # 2021/08/14 21:55:23
# 8.strptime():将时间的字符串形式转换为时间元组形式,也可以理解为解析时间字符串 ******
# 注意:解析时间字符串的时候,一定要注意时间字符串和时间格式之间的完全匹配
# t8 = strptime("2021/08/14 21:55:23","%Y.%m.%d")
# print(t8) # ValueError: time data '2021/08/14 21:55:23' does not match format '%Y.%m.%d'
t8 = strptime("2021/08/14 21:55:23","%Y/%m/%d %H:%M:%S")
print(t8)
# 9.sleep():休眠,让程序进入阻塞状态,指定时间达到之后,会自动解除阻塞,程序会继续向下执行 *****
# 使用场景:使用在进程和线程中较多
print("start")
sleep(5)
print("over")
3.2datetime模块
# datetime模块是在time模块的基础上进行了二次封装
import datetime
"""
date:日期,包含年月日
time:时间,包含时分秒
datetime:日期和时间,包含年月日时分秒
tzinfo:时区
"""
# 1.获取当前时间 ****
d1 = datetime.datetime.now()
print(d1) # 2021-08-03 11:46:57.798894
print(type(d1))
# 2.将时间转换为字符串【时间字符串的格式化】
"""
时间的占位符
%Y:年
%m:月
%d:日
%H:时
%M:分
%S:秒
%d:日 %D:月/日/年
%Y:2021 %y:21
%H:时 %h:月的英文
"""
d2 = datetime.datetime.now()
time_str1 = d2.strftime("%Y.%m.%d %H:%M:%S")
print(time_str1)
print(type(time_str1))
# 3.将格式化字符串转换为时间格式
# 注意:进行时间字符串解析的时候,一定要注意格式的匹配
d3 = datetime.datetime.strptime(time_str1,"%Y.%m.%d %H:%M:%S")
print(d3)
print(type(d3))
# 4.两个时间对象之间可以进行减法运算 *****
date1 = datetime.datetime(2020,10,1,14,15,30,100)
date2 = datetime.datetime(2020,10,3,13,30,31,100)
d4 = date2 - date1
print(d4)
print(d4.days) # property属性
print(d4.seconds)
3.3calender模块
import calendar
# 1.判断是否是闰年 *****
print(calendar.isleap(2020))
# 2.获取指定年指定月的万年历
print(calendar.month(2020,10))
# 3.获取指定年的万年历
print(calendar.calendar(2020))
# 4.获取指定日期的星期,取值范围为:0~6
print(calendar.weekday(2021,8,8))
# 5.获取指定年份之间闰年的个数
print(calendar.leapdays(2000,2021))
print(dir(calendar))
3.4os模块
os模块中包含普通的操作系统功能,提供了非常丰富的方法用来处理文件和目录
# os模块中包含了普通的操作系统功能,提供了非常丰富的用来处理文件或文件夹的功能
import os
# 一、os模块下的函数
# 1.listdir(path):列出指定路径下所有的内容,包含文件和文件夹, ********
# 返回一个列表,其中的元素是文件或文件夹的名称
path = r"/Users/yangyang/Desktop/coding14" # 绝对路径
r1 = os.listdir(path)
print(r1)
# 2.mkdir(path):创建一个目录 ******
os.mkdir(r"aaa") # 相对路径
# open():创建一个文件
f1 = open(r"a1.txt","w",encoding="utf-8")
# 3.rmdir(path):删除一个目录
os.rmdir(r"aaa")
# 4.remove(path):删除一个文件
os.remove(r"a1.txt")
# 5.rename(old,new):给指定的文件或文件夹重命名
os.rename(r"aaa","bbb")
os.rename(r"a1.txt",'file.txt')
# 二、os.path模块下的函数 *********
# 1.join(父路径,子路径):拼接路径
path = r"/Users/yangyang/Desktop/coding14"
subpath = r"Day2Code"
# a.+,不推荐使用,原因:python是跨平台的,但是,如果采用+的方式拼接路径,不同操作系统中拼接的方式不同
new_path1 = path + "/" + subpath # 在windows中,new_path1 = path + "\\" + subpath
print(new_path1)
# b.join()
new_path2 = os.path.join(path,subpath)
print(new_path2)
# 2.split(path):对路径进行分割,结果为一个元组,格式:(父路径,子路径)
r1 = os.path.split(path)
print(r1)
path1 = r"/Users/yangyang/Desktop/coding14/Day2Code/5.输入print.py"
r1 = os.path.split(path1)
print(r1)
# 3.splitext(path):对路径进行分割,结果为一个元组,格式:(父路径,扩展名)
# 如果path是一个文件夹,则结果为(父路径,""),如果path是一个文件,则结果为(父路径,".扩展名")
print(os.path.splitext(path))
print(os.path.splitext(path1))
# 4.isfile(path):判断指定路径是否是文件
print(os.path.isfile(path1))
print(os.path.isfile(path))
# 5.isdir(path):判断指定路径是否是文件夹
print(os.path.isdir(path1))
print(os.path.isdir(path))
# 6.exists(path):判断path是否存在
print(os.path.exists(path))
# 7.getsize(path):获取一个文件的字节大小,常用于文件读写中
print(os.path.getsize(path1))