文章目录
学习目标
- 能够说出模块和包的概念
- 能够使用不同的语句导入模块和包
- 能够使用标准库实现功能
- os模块
- sys模块
- time模块
- hashlib模块等
- 能够使用pip安装第三方模块
- 能够使用pip命令管理Python安装包
- 能够修改pip的安装源
- 能够自定义模块
一、导入模块的语法
- 模块: 在Python里一个py文件,就可以理解为模块。但不是所有的py文件能够作为一个模块来导入。如果想要让一个py文件能够被导入,模块名字必须要遵守 命名规则
# Python为了方便开发,提供了很多内置模块
import time # 1. 使用 import 模块名直接导入一个模块
from random import randint # 2. from 模块名 import 函数名,导入一个模块里的指定的方法或者变量
from math import * # 3. from 模块名 import * 导入这个模块里的所有方法和变量
import datetime as dt # 4. import 模块名 as 别名 导入一个模块并给这个模块起一个别名
from copy import deepcopy as dp # 5. from 模块名 import 函数名 as 别名
# 导入这个模块以后,就可以使用这个模块里的方法和变量
print(time.time())
randint(0,2) # 生成 [0,2] 的随机整数
print(pi) # 圆周率
二、常见的内置模块
2.1 os模块
# os 全称 OperationSystem 操作系统
# os 模块里提供的方法就是用来调用操作系统里的方法
import os
# os.name ==> 获取操作系统的名字 windows系列 ==> nt / 非windows ==> posix
print(os.name) # nt
# os.sep获取路径的分割符 windows ==> \ windows ==> /
print(os.sep) # \
# os.path会经常被使用
# abspath: 获取文件的绝对路径
print(os.path.abspath('...'))
# isdir: 判断是否是文件夹
print(os.path.isdir('...'))
# isfile: 判断是否是文件
print(os.path.isfile('...'))
# exists: 判断路径是否存在
print(os.path.exists('...'))
# join: 按照系统路径拼接路径字符串
print(os.path.join('...','...'))
# os 里其他方法的介绍
os.getcwd() # 获取当前的工作目录,即当前pytohn脚本工作的目录
os.chdir('test') # 改变当前脚本工作目录,相当于shell下的cd命令
os.rename('毕业论文.txt','毕业论文-最终版.txt') # 文件重命名
os.remove('毕业论文.txt') # 删除文件
os.rmdir('demo') # 删除空文件夹
os.removedir('demo') # 删除空文件夹
os.mkdir('demo') # 创建一个文件夹
os.chdir('c:\\') # 切换工作目录
os.listdir('c:\\') # 列出指定目录下的所有文件和文件夹
os.name # nt -> windows posix -> Linux/Unix或者MacOS
os.environ # 获取到环境配置
os.environ.get('PATH') # 获取指定的环境配置
2.2 sys模块
# sys系统相关的功能
import sys
# exit: 程序退出,和内置函数 exit 功能一致
sys.exit()
# path: 结果是一个列表,表示python解释器查找模块的所有路径
print(sys.path)
sys.stdin # 可以像 input 一样,接受用户的输入
sys.stdout # 修改 sys.stdout 可以改变默认输出位置
sys.stderr # 修改 sys.stderr 可以改变错误输出的默认位置
2.3 math模块
# 数学计算相关的模块
import math
print(math.factorial())
# 幂运算
print(math.pow(2,10))
# 向下取整
print(math.floor(12.98))
# 向上取整
print(math.ceil(15.0001))
# round() 内置函数,实现四舍五入
2.4 random模块
# random模块用来生成一个随机数
# randint(a, b) 用来生成 [a, b]的随机整数 等价于 randrange(a,b+1)
print(random.randint(1,10)) # 生成[1, 10]的随机整数
# randrange(a, b) 用来生成 [a, b)的随机整数
print(random.randrange(1,10)) # 生成[1, 10)的随机整数
# random() 用来生成 [0,1) 的随机浮点数
print(random.random())
# choice 用来在可迭代对象里随机抽取一个数据
print(random.choice(['zhangsan','lisi','jack','jerry']))
# sample 用来在可迭代对象里随机抽取 n 个数据
print(random.sample(['zhangsan','lisi','jack','jerry'],2))
2.5 datetime模块
import datetime as dt
# 以一个下划线 _ 开始 ==> _x
# 以两个下划线 __ 开始 ==> __x
# 以两个下划线开始,再以两个下划线结束 __x__
# 涉及到四个 datetime/date/time/timedelta
print(dt.datetime.now()) # 获取当前的日期时间
print(dt.date(2020, 1, 1)) # 创建一个日期
print(dt.time(18,23,45)) # 创建一个时间
print(dt.datetime.now() + dt.timedelta(3)) # 计算三天以后的日期时间
2.6 time模块
# 除了使用datetime模块里的time类以外,Python还单独提供了另一个time模块,用来操作时间。time模块不仅可以显示时间,还可以控制程序,让程序停止(使用sleep函数)
import time
print(time.time()) # 获取从 1970-01-01 00:00:00 UTC 到现在时间的秒数
print(time.strftime('%Y-%m-%d %H:%M:%S')) # 按照指定格式输出时间
print(time.asctime()) # Mon Apr 15 20:03:23 2019
print(time.ctime()) # Mon Apr 15 20:03:23 2019
print(time.sleep(10)) # 让线程暂停10秒
2.7 calendar模块
import calendar # 日历模块
c = calendar.calendar(2019) # 生成 2019 年的日历,并且以周日为实际日期码
print(c) # 打印2019年日历
calendar.setfirstweekday(calendar.SUNDAY) # 设置每周起始日期码。周一到周日分别对应 0 ~ 6
print(calendar.firstweekday()) # 返回当前每周起始七日的设置。默认情况下,首次载入calendar模块时返回0,即星期一
print(calender.isleap(1900)) # True. 闰年返回True,否则返回False
count = calendar.leapdays(1996,2010) # 获取1996年到2010年一共有多少个闰年
print(count)
calendar.month(2020,3) # 打印2019年3月的日历
2.8 hashlib和hmac模块
import hashlib
import hmac
# 这两个模块都是用来进行数据加密
# hashlib模块里只要支持两个算法 md5 和 sha 加密
# 加密方式:
# 1. 单向加密: 只有加密的过程,不能解密md5/sha
# 2. 对称加密
x = hashlib.md5() # 生成一个md5对象
x.update('abc'.encode('utf-8')) # 需将加密的内容转换成为二进制
# 或者x = hashlib.md5('abc'.encode('utf-8'))
print(x.hexdigest()) # abc加密后的内容,并且是唯一对应的
# 另外一种加密方式
x = hashlib.sha1('abc'.encode('utf-8'))
x = hashlib.sha224('abc'.encode('utf-8'))
print(x.hexdigest()) # abc加密后的内容,并且是唯一对应的
# 使用hmac的加密方式,hmac 加密可以指定秘钥
h = hmac.new('h'.encode(),'你好'.encode())
result = h.hexdigest()
print(result) # 获取加密后的结果
2.9 uuid模块
- UUID是128位的全局唯一识别符,通常由32字节的字符串便是,它可以保证时间和空间的唯一性,也称为GUID。通过MAC地址、时间戳、命名空间、随机数、伪随机数来保证生产的ID的唯一性。随机生产字符串,可以当成token使用,当成用户账户使用,当成订单号使用
# uuid 用来生成一个全局唯一标识码的模块
import uuid
print(uuid.uuid1()) # 32 个长度 每一个字符有16个选择
方法 | 作用 |
---|---|
uuid.uuid1() | 基于MAC地址,时间戳i,随机数来生成唯一的uuid,可以保证全球范围内的唯一性 |
uuid.uuid2() | 算法与uuid1相同,不同的是把时间戳的前4位置换为POSIX的UID。不过需要注意的是python中没有基于DCE的算法,所以python的uuid模块中没有uuid2()这个方法 |
uuid.uuid3(namespace,name) | 通过计算一个命名空间he米子的md5散列值来给出一个uuid,所以可以保证命名空间中的不同名字具有不同的uuid。namespace并不是一个自己手动指定的字符串或其他量,而是在uuid模块中本身给出的一些值。比如 uuid.NAMESPACE_DNS, uuid.NAMESPACE_OID这些值。这些值本身也是UUID对象,根据一定的规则计算得出 |
uuid.uuid4() | 通过伪随机数得到uuid,是有一定概率重复的 |
uuid.uuid5(namespace,name) | 和uuid基本相同,只不过采用的散列算法是sha1 |
三、pip包管理工具
# 下载指定的第三方模块
pip install 模块名
# 安装指定环境文件内的模块
pip install -r requirement.txt
# 从指定的地址下载包
pip install <package_name> -i <url>
# 卸载指定的第三方模块
pip uninstall 模块名
# 用来列出当前环境安装了哪些模块
pip list
# 用来列出当前环境安装的模块名和版本号
# > 重定向,将环境内容写入到 requirement.txt 里
pip freeze > requirement.txt
四、自定义模块
# 一个模块本质上就是一个 py 文件
# 自己定义一个模块,其实就是自己写一个 py 文件
# 如果一个py文件想要当做一个模块被导入,文件名一定要遵守命名规范(数字、字母、下划线)
# 导入了一个模块,就能使用这个模块里变量和函数
import my_module
# 使用 from <module_name> import * 导入这个模块里 "所有" 的变量和函数
# 本质就是读取模块里的 __all__ 属性,看这个属性里定义了哪些变量和函数
__all__ = ['m', 'test']
# 如果模块里没用定义 __all__ 才会导入所有不以 _开头的变量和函数 (以一个下划线开始的变量,建议只在本模块里使用,别的模块不要导入)
# __name__: 当直接运行这个py文件的时候,值是 __main__
# 如果这个py文件作为一个模块导入的时候,值是文件名
# 若想设置仅能在当前文件内运行的代码时,使用
if __name__ == '__main__':
pass
五、包
- python中将 多个相关功能的模块(py文件)放置于同一个文件夹下,并且该文件夹里存在 __init__.py文件,则该文件夹称之为 python包
- 可以使用 from 包名 import 模块名 的形式导入包里的模块
https://zhuanlan.zhihu.com/p/335347908 ---- Python核心知识系列:Python工程组织结构