模块
模块基础
- 模块是一系列功能的集合体
- 模块分为四种
- 一个py文件就可以是一个模块
- 包:一个存放有
__init__.py文件的文件夹 - 使用c编写并链接到Python解释器的内置模块
- 已被编译为共享的或DLL的C或C++扩展
- 模块的三种来源
- Python解释器自带的,内置库,标准库
- 第三方库
- 自定义库
- 使用库的优点
- 拿来主义,极大的提高的开发效率
- 解决代码冗余问题
- 首次导入模块发生的三件事
- 触发spam.py的运行,产生一个模块的命名空间
- 运行spam.py的代码,将运行过程中产生的名字都丢到模块的命名空间中
- 在当前执行文件的名称空间中拿到一个名字spam,改名字就是指向模块的名称空间的,后续的导入直接引用首次导入的成果
- 模块的导入
- import 语句
- from import 语句
- as 起别名
- 循环导入问题
- 循环导入问题是指在一个模块加载/导入的过程中导入另一个模块,而在另一个模块中又返回导入类第一个模块,由于第一个模块尚未加载完毕,从而导致引用失败
- 解决方法一:导入语句放到最后,保证在导入时,所有名字都已经加载过
- 解决方法二:导入语句放到函数中,只有在调用函数时,函数才会执行其内部代码
- 模块的搜索路径顺序
- 内存
- 内置
- sys.path:强调 sys.path是以执行程序为准的
- py文件的两种用途
- 脚本
- 模块
包
- 包就是一个包含有_init_.py文件的文件夹,创建包的目地是为了用文件夹将文件/模块组织起来
- 包只是模块的一种形式,本质就是一种模块
软件开发目录规范
- 为了提高程序的可读性和可维护性,我们应该为软件设计良好的目录结构,软件目录结构无硬性要求,只要清晰可读即可
- 如下结构:
- bin:执行文件,入口文件
- core:存放业务逻辑代码
- api:存放接口文件,接口主要用于为业务逻辑提供数据操作
- db:存放操作数据库相关的文件,主要用于与数据库交互
- lib:存放程序中常用的自定义模块
- conf:存放配置文件
- log:存放日志文件
- run.py: 程序的启动文件,一般放在项目的根目录下,因为在运行时会默认将运行文件所在的文件夹作为sys.path的第一个路径,这样就省去了处理环境变量的步骤
- setup.py: 安装、部署、打包的脚本。
- README: 项目说明文件。
常用模块
1-time模块
import time
-
时间戳:时间戳表示的是从1970年1月1日08:00:00开始按秒计算的偏移量
time_stamp = time.time() print(time_stamp, type(time_stamp)) # 1620912034.4001145 <class 'float'> -
格式化的字符:strftime('%Y-%m-%d %H:%M:%S %p') 根据设置的格式输出时间,返回字符串
format_time = time.strftime('%Y-%m-%d %H:%M:%S %p') print(format_time, type(format_time)) # 2021-05-13 21:20:12 PM <class 'str'> -
结构化的时间对象:localtime() 返回一个元组,一共有9个元素:年 月 日 时 分 秒 一周的第几日(0是周一) 一年的第几日 夏令时
print(format(time.localtime())) #time.struct_time(tm_year=2021, tm_mon=5, tm_mday=13, tm_hour=21, tm_min=19, tm_sec=20, tm_wday=3, tm_yday=133, tm_isdst=0) -
三者的转换
strptinr-> mktime-> 格式化字符串----------------结构化的时间------------------时间戳 <-strftime <-lovaltimr/gmtime
2-datetime模块
import datetime
print(datetime.datetime.now()) # 获取当前具体时间,年月日时分秒毫秒
print(datetime.datetime.now() + datetime.timedelta(hours=3)) # 加上三小时
print(datetime.datetime.now() + datetime.timedelta(hours=-3)) # 加上负的三小时,也就是减去三小时
print(datetime.datetime.now() - datetime.timedelta(hours=3)) # 减去三小时
res = datetime.datetime.now()
print(res.date()) # 获取日期
print(res.strftime('%H:%M:%S')) # 获取时间
print(res.replace(hour=10)) # 将小时替换成10时
3-random模块
import random
random.random() # 大于0小于1的小数
random.randint(1, 3) # 大于等于1小于等于3的整数
random.randrange(1, 3) # 大于等于1小于3的整数
random.choice([]) # 列表内随机一个元素
random.sample([], 1) # 列表内随机1个元素,组成元组
random.uniform(1, 3) # 大于1小于3的小数
# 随机生成验证码
def make_code(size=6):
res = ''
for i in range(size):
num = str(random.randint(0, 9))
alpha = chr(random.randint(65, 90))
res += random.choice([num, alpha])
return res
4-os模块
os模块负责程序与操作系统的交互,提供了访问操作系统底层的接口,多用于文件处理。
| 方法 | 详解 |
|---|---|
| os.getcwd() | 获取当前工作目录,即当前python脚本工作的目录路径 |
| os.chdir(“dirname”) | 改变当前脚本工作目录;相当于shell下cd |
| os.curdir | 返回当前目录: (‘.’) |
| os.pardir | 获取当前目录的父目录字符串名:(‘..’) |
| os.makedirs(‘dirname1/dirname2’) | 可生成多层递归目录 |
| os.removedirs(‘dirname1’) | 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 |
| os.mkdir(‘dirname’) | 生成单级目录;相当于shell中mkdir dirname |
| os.rmdir(‘dirname’) | 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname |
| os.listdir(‘dirname’) | 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 |
| os.remove() | 删除一个文件 |
| os.rename(“oldname”,”newname”) | 重命名文件/目录 |
| os.stat(‘path/filename’) | 获取文件/目录信息 |
| os.sep | 输出操作系统特定的路径分隔符,win下为”",Linux下为”/“ |
| os.linesep | 输出当前平台使用的行终止符,win下为”\r\n”,Linux下为”\n” |
| os.pathsep | 输出用于分割文件路径的字符串 win下为;,Linux下为: |
| os.name | 输出字符串指示当前使用平台。win->’nt’; Linux->’posix’ |
| os.system(“bash command”) | 运行shell命令,直接显示 |
| os.environ | 获取系统环境变量 |
| os.path.abspath(path) | 返回path规范化的绝对路径 |
| os.path.split(path) | 将path分割成目录和文件名二元组返回 |
| os.path.dirname(path) | 返回path的目录。其实就是os.path.split(path)的第一个元素 |
| os.path.basename(path) | 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素 |
| os.path.exists(path) | 如果path存在,返回True;如果path不存在,返回False |
| os.path.isabs(path) | 如果path是绝对路径,返回True |
| os.path.isfile(path) | 如果path是一个存在的文件,返回True。否则返回False |
| os.path.isdir(path) | 如果path是一个存在的目录,则返回True。否则返回False |
| os.path.join(path1[, path2[, …]]) | 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 |
| os.path.getatime(path) | 返回path所指向的文件或者目录的最后存取时间 |
| os.path.getmtime(path) | 返回path所指向的文件或者目录的最后修改时间 |
| os.path.getsize(path) | 返回path的大小 |
5-sys模块
sys模块负责程序与python解释器的交互,提供了一系列的函数和变量,用于操控python的运行时环境。
| 方法 | 详解 |
|---|---|
| sys.argv | 命令行参数List,第一个元素是程序本身路径 |
| sys.modules.keys() | 返回所有已经导入的模块列表 |
| sys.exc_info() | 获取当前正在处理的异常类,exc_type、exc_value、exc_traceback当前处理的异常详细信息 |
| sys.exit(n) | 退出程序,正常退出时exit(0) |
| sys.hexversion | 获取Python解释程序的版本值,16进制格式如:0x020403F0 |
| sys.version | 获取Python解释程序的版本信息 |
| sys.maxint | 最大的Int值 |
| sys.maxunicode | 最大的Unicode值 |
| sys.modules | 返回系统导入的模块字段,key是模块名,value是模块 |
| sys.path.append(path) | 添加path到环境变量中 |
| sys.path | 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 |
| sys.platform | 返回操作系统平台名称 |
| sys.stdout | 标准输出 |
| sys.stdin | 标准输入 |
| sys.stderr | 错误输出 |
| sys.exc_clear() | 用来清除当前线程所出现的当前的或最近的错误信息 |
| sys.exec_prefix | 返回平台独立的python文件安装的位置 |
| sys.byteorder | 本地字节规则的指示器,big-endian平台的值是’big’,little-endian平台的值是’little’ |
| sys.copyright | 记录python版权相关的东西 |
| sys.api_version | 解释器的C的API版本 |

浙公网安备 33010602011771号