模块module
-
特点
– 模块是一个包含python代码的文件(.py)
– 拆分程序,方便编写维护
– 增加复用
– 当做命名空间使用,避免命名冲突
– 可包含:函数(单一功能)、类、测试代码 -
如何使用:
– import module_name
导入模块(调用需要前缀)
–module_name.function_name
调用模块的函数
–module_name.class_name
调用模块的类
–import module_name as newname
模块采用新代称
–from module_name import func_name /class_name
仅导入模块中的某函数某类(调用不需要模块名前缀 )
–from module_name import *
导入模块中所有内容(调用不需要模块名前缀) -
if __ name __ == ‘__ main __’
当前模块==直接执行的主进程(程序入口)
–可以有效避免模块代码被导入时被动执行
–所有程序的入口都以此代码开始 -
模块的搜索路径和储存
–import sys
–sys.path 获取路径列表(list类型展现)
–sys.path.append(dir)
–模块的加载顺序:
内存中已经加载好的模块
python内置模块
搜索sys.path路径
包
-
包是一种组织管理模块的方式
-
包:
–__ init __ .py(包的标志文件)
– 模块1(m01.py)
–模块2(m02.py)
–子包(__ init __ .py /子模块01/子模块02) -
包的导入与使用:
–import package_name 直接导入一个包
–package_n.module_n.func_name /class_name 调用包的函数(包含__ init __.py)
–import package_n as new_name 起别名
–from package_n.module_n import module_n01,02…导入包的模块(调用需要模块前缀)
–from package_n import * 导入包中 __ init __ 中所有函数和类(调用不需要包名前缀) -
__ all __ = [“module01”,“module02”,"module03…]在__ init __ 中则不再导入其中代码,而是导入 __ all __ 中的指定模块或包
–包名作为变量前缀可以区分命名空间
常用模块
– calender / time / datetime
– timeit
– os
– shutil
– zip
– math
–random
– string
- calender
– calender.calender(年份,w=,l=,c=) 获取一年的日历
– calender.isleap判断闰年
– calender.leapdays(1992,2020)获取指定年份间闰年数
– calender.monthrange获取这个月周几开始和总天数
– calender.prcal(2020)直接打印日历
– calender.prmonth(2020,4)打印月份
–calender.weekday(2020,4,9)获取周几
- time
– 时间戳
1.一个时间表示数,根据语言,整数或浮点数
2.是从1970年1月1日0分0秒到现在经历的秒数
3.不要太远也不要70年之前(32位支持到2038年)
– UTC时间
世界标准时间(中国是UTC+8)
– 夏令时
欧美国家夏季拨快一个小时
– 时间元组
一个包含时间内容的普通元组
属性 | 值 |
---|---|
tm_year | 2020 |
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, -1是决定是否为夏令时的旗帜 |
– time.timezone 当前时区和UTC相差秒数 中国是-28800
– time.altzone在有夏令时情况下,当前时区与UTC相差秒数
– time.daylight当前是否是夏令时
– time.time
– time.localtime()得到当前时间结构,结构请看上表↑
– time.ascttime()时间结构转化字符串
– time.ctime()得到当前时间的字符串
import time
t1 = time.ctime()
t2 = time.localtime()
t3 = time.asctime(t)
print(t2)
#打印结果为 time.struct_time(tm_year=2020, tm_mon=4, tm_mday=9, tm_hour=20, tm_min=23, tm_sec=31, tm_wday=3, tm_yday=100, tm_isdst=0)
print(t1)
print(t3)
#打印结果为 Thu Apr 9 20:23:31 2020
– time.mktime()得到对应时间的时间戳
– time.perf_counter() 获取cpu时间,3.3版本之前是clock()
– time.sleep 使程序睡眠,n秒后继续
for i in range(10):
print(i)
time.sleep(1)#每次循环停1秒
– strfttime()将时间元组转化为自定义的字符串格式
格式 | 命令 |
---|---|
%a | 星期几的简写 |
%A | 星期几的全称 |
%b | 月分的简写 |
%B | 月份的全称 |
%c | 标准的日期的时间串 |
%C | 年份的后两位数字 |
%d | 十进制表示的每月的第几天 |
%D | 月/天/年 |
%e | 在两字符域中,十进制表示的每月的第几天 |
%F | 年-月-日 |
%g | 年份的后两位数字,使用基于周的年 |
%G | 年分,使用基于周的年 |
%h | 简写的月份名 |
%H | 24小时制的小时 |
%I | 12小时制的小时 |
%j | 十进制表示的每年的第几天 |
%m | 十进制表示的月份 |
%M | 十时制表示的分钟数 |
%n | 新行符 |
%p | 本地的AM或PM的等价显示 |
%r | 12小时的时间 |
%R | 显示小时和分钟:hh:mm |
%S | 十进制的秒数 |
%t | 水平制表符 |
%T | 显示时分秒:hh:mm:ss |
%u | 每周的第几天,星期一为第一天 (值从0到6,星期一为0) |
%U | 第年的第几周,把星期日做为第一天(值从0到53) |
%V | 每年的第几周,使用基于周的年 |
%w | 十进制表示的星期几(值从0到6,星期天为0) |
%W | 每年的第几周,把星期一做为第一天(值从0到53) |
%x | 标准的日期串 |
%X | 标准的时间串 |
%y | 不带世纪的十进制年份(值从0到99) |
%Y | 带世纪部分的十进制年份 |
%Z | 时区名称,如果不能得到时区名称则返回空字符。 |
%% | 百分号 |
import time
t = time.localtime()
print (time.strftime("%Y-%m-%d %H:%M:%S", t))
- datetime
–datetime.date()提供一个日期,具有year,month,day属性
– datetime.time()提供一个时间,具有hour,minute,sec,microsec等属性
–datetime.timedelta提供一个时间差,时间长度
–datetime.datetime类,包含以下函数:
datetime.now()现在时刻
datetime.today今天时间
datetime.utcnow UTC时间
datetime.fromtimestamp 时间戳返回本地
datetime.timedelta 时间间隔
import datetime
t1 = datetime.datetime.now()
print (t1)#打印当前时间
t = datetime.timedelta(20)
print ((t + t1).strftime("%Y-%m-%d %H:%M:%S"))#打印20天以后的时间
- timeit
–timeit.timeit (stmt="[代码]",number=次数)用于测量运行一段代码多少次的耗时 stmt=函数/变量
import timeit
def a():
return 1
t = timeit.timeit(stmt=a,number=200000000)
print(t)
- os
– 与系统相关的文件操作包含三个大的模块
– os 操作系统目录相关
– os.path 系统路径相关
– shutil 高级文件操作(目录树,文件复制,删除,移动)
os.getcwd()获取当前工作路径
os.chdir()改变当前工作路径
os.listdir()获取目录中所有子目录和文件的列表
os.makedirs()递归方式创建文件夹
os.system(ls/touch XX)运行系统shell命令,或者用subprocess模块
os.getenv(“PATH”)获取指定系统环境变量
–os.path
os.path.abspath()路径转换绝对路径(linux 点好是当前目录,双点是父目录)
os.path.basename(路径)获取路径中文件名部分
os.path.join(a,b)将路径拼成一个
os.path.split(路径)输出两个值的元组 文件夹部分+文件名部分
os.path.isdir(路径)检查参数是否是目录
os.path.exists(路径/文件)检测文件或者目录是否存在
- shutil
– shutil.copy(“原路径+文件名”,“目标路径+新文件名”)复制文件
– shutil.move("原路径“,”目标路径”)移动文件/文件夹
– shutil.make_archive(“归档目标的目录和文件名”,‘后缀’,‘需要归档的文件夹’)归档,也叫压缩
– shutil.unpack_archive(“压缩的地址”,“解压缩后的存放地址”)解压缩
- zip file
– zipfile.zipfile(“路径”)创建一个zip对象
– zipfile.getinfo(name)获取zip文件信息
– zipfile.namelist()获取zip文档内所有文件名列表
– zipfile.extractall(“路径”)解压文档到当前路径
- random
– random.random()生成一个0-1之间的小数
– random.choice(序列)随即返回序列中某个值
– random.shuffle(列表)随机打乱列表顺序,不能应用返回值
– random.randint(0,100)随机产生0-100一个整数