Python模块的使用
- Python 模块 (Module),是一个 Python 文件,以.py 结尾,包含了 Python 对象定义和Python语句
一、 模块的导入
# Python为了方便开发,提供了很多内置模块
import time # 1、使用 import魔铠名直接导入一个模块
from random import randint # 2、 from 模块名 import 函数名 ,导入一个模块里的方法或者变量
from math import * # 3、from 模块名 import * 导入这个模块里的"所有"方法和变量
import datetime as dt # 4、导入一个模块并给这个模块起一个别名
from copy import deepcopy as dp # 5、from 模块名 import 函数名 as 别名
# 导入这个模块以后,就可以使用这个模块里的方法和变量
print(time.time())
print(randint(0, 10))
print(pi)
print(dt.datetime(2021, 4, 7, 20, 30, 00))
dp(['hello', 'good', [1, 2, 3], 'bye'])
二、python内置模块
1. os模块
# 获取文件名和文件类型
# print(os.path.splitext('2020.2.21.demo.py')) # ('2020.2.21.demo', '.py')
# os 里其他方法的介绍
# print(os.getcwd()) # 获取当前工作目录
# os.chdir(r'C:\Users\frecy\PycharmProjects\learning\py_study') # 改变当前脚本工作目录,相当于shell下的cd命令
# print(os.getcwd())
# os.rename('测试123.txt', 'test123.txt') # 文件重命名
# os.remove('test123.txt') # 删除文件
# os.rmdir('demo') # 删除文件夹
# os.removedirs('xxc') # 删除空文件夹
# os.mkdir('demo') # 创建一个文件夹
# print(os.listdir('C:\\'))
# os.name # 获取操作系统名称 windows ==>nt Linux/UniX/MacOS ==> posix
# print(os.environ) # 获取环境变量
print(os.environ.get('PATH')) # 获取指定的环境变量
2. sys模块
# sys 系统相关的功能
import sys
print('hello world')
# sys.exit(100) # 退出程序,和内置函数exit 功能一致
print('哈哈哈')
print(sys.path) # 结果是一个列表,表示查找模块的路径
# sys.stdin # 接收用户的输入,和input 相关,可以像input一样,但是可以不断的输入,直到输入两个连续的回车键
# sys.stdout 和 sys.stderr 默认都是在控制台
# sys.stdout # 修改 sys.stdout 可以改变默认输出位置
# sys.stderr # 程序退出,和内置函数exit功能一致
3. math模块
# 数学计算相关的模块
import math
# 2 ** 10 / pow(2, 10) /math.pow(2, 10)
print(math.factorial(6)) # 阶乘
print(math.pow(2, 10)) # 1024 幂运算
print(math.floor(12.98)) # 12 向下取整
print(math.ceil(15.0001)) # 16 向上取整
# round() # 内置函数,实现四舍五入到指定位数
print(math.sin(math.pi / 6)) # 弧度 π = 180°
print(math.cos(math.pi / 3)) # 0.5
print(math.tan(math.pi / 2)) # 无穷大
4. random模块
# random 模块用来生成一个随机数
import random
print(random.randint(2, 9)) # 用来生成[a, b]的随机整数,等价于randrange(a, b+1)
# random() 用来生成[0, 1)的随机浮点数
print(random.random())
# randrange(a, b) 用来生成[a, b)的随机整数
print(random.randrange(2, 9))
# chioce 用来在可迭代对象里随机抽取一个数据
print(random.choice([1, 2, 3, 4, 6, 2, 1, 6]))
# sample 用来在可迭代对象里随机抽取 n 个数据
print(random.sample(['zhangsan', 'lisi', 'jack', 'jerry', 'henry', 'tony'], 2))
5. datetime模块
import datetime as dt
# python方法和属性
# 以一个下划线 _ 开始
# 以两个下划线 __ 开始 __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)) # 计算三天以后的日期
6. time模块
import time
print(time.time()) # 获取从 1970-01-01 00:00:00 UTC 到现在时间的秒数
print(time.strftime("%Y-%m-%d %H-%M-%S")) # 按照指定格式输出时间
print(time.asctime((1,1,1,1,1,1,2,147,-1))) # Mon Apr 15 20:03:23 2019
print(time.ctime()) # Mon Apr 15 20:03:23 2019 传入秒数
print('hello')
time.sleep(2) # 让时间暂停10秒钟
print('world')
7. calendar模块
import calendar # 日历模块
# calendar.setfirstweekday(calendar.SUNDAY) # 设置每周起始日期码,周一到周日分别对应0~6
# calendar.firstweekday() # 返回当前每周起始日期的设置。默认情况下,首次载入calendar模块时返回0,即星期一
# c = calendar.calendar(2021) # 生成2021年的日历,并且以周日为起始日期码
# print(c) # 打印2021年日期
# print(calendar.isleap(2000)) # True, 闰年返回True,否则返回False
count = calendar.leapdays(1996, 2010) # 获取1996年到2010年一共有多少个闰年
print(count)
print(calendar.month(2021, 4)) # 打印2021年4月的日历
8. hashlib和hmac模块
import hashlib
import hmac
# 这两个模块都是用来进行数据加密
# hashlib模块里主要支持两个算法 md5 和 sha 加密
# 加密方式: 单向加密(md5/sha/hmac)、对称加密、非对称加密rsa
# 单向加密:只有加密的过程,不能解密 md5/sha
# 需要将加密的内容转换成为二进制
x = hashlib.md5() # 生成一个md5对象
x.update('abc'.encode('utf8'))
# print(x.hexdigest()) # 900150983cd24fb0d6963f7d28e17f72
# 'abc' ==> 900150983cd24fb0d6963f7d28e17f72
# 文件的md5,文件下载前使用加密生成一个密文,下载完成后生成一个密文,两个对比检查下载文件是否正确
# h1 = hashlib.sha1('123456'.encode())
# print(h1.hexdigest()) # 7c4a8d09ca3762af61e59520943dc26494f8941b
# h2 = hashlib.sha224('123456'.encode()) # 224位 一个十六进制占4位
# print(h2.hexdigest()) # f8cdb04495ded47615258f9dc6a3f4707fd2405434fefc3cbf4ef4e6
# h3 = hashlib.sha256('123456'.encode())
# print(h3.hexdigest()) # 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
# h4 = hashlib.sha384('123456'.encode())
# print(h4.hexdigest())
# 0a989ebc4a77b56a6e2bb7b19d995d185ce44090c13e2984b7ecc6d446d4b61ea9991b76a4c2f04b1b4d244841449454
# hmac 加密可以指定秘钥
h = hmac.new('h'.encode(), '你好'.encode(), 'sha256')
result = h.hexdigest()
print(result) # 获取加密后的结果
9. uuid模块
# uuid用来生成一个全局唯一id的模块
import uuid
# 基于MAC地址,时间戳,随机数来生成唯一的uuid,可以保证全球范围内的唯一性,比较耗时间,效率低
print(uuid.uuid1()) # 32个长度 每一个字符有16个选择 ,16**32
# print(uuid.uuid2()) # python中没有基于DCE的算法,所以python的uuid模块中没有uuid2这个方法
# uuid3 和 uuid5是使用传入的字符串根据指定的算法算出来的,是固定的
print(uuid.uuid3(uuid.NAMESPACE_DNS, 'zhangsan')) # 生成固定的uuid,算法 md5
print(uuid.uuid5(uuid.NAMESPACE_DNS, 'zhangsan')) # 生成固定的uuid,算法 sha1
# 通过伪随机数得到uuid,是有可能重复的
print(uuid.uuid4()) # 生成随机uuid,使用的最多,如邮箱激活链接
10.使用自定义模块
# 一个模块本质上就是一个py文件
# 自己定义一个模块,其实就是自己写一个py文件
# 如果一个py文件想要当做一个模块被导入,文件名一定要遵守命名规范
# 必须由数字、字母或下划线组成,不能数字开头
# 导入了一个模块,就能使用这个模块里的变量和函数
# import my_mod
# 使用 from <module_name> import * 导入这个模块里"所有"的变量和函数
# 本质是读取模块里的 __all__ 属性,看这个属性里定义了哪些变量和函数
# 如果模块里没有定义 __all__ 才会导入所有不以 _ 开头的变量和函数
# 以一个下划线开头的变量,建议只在本模块里使用,别的模块不要导入
from my_mod import *
# print(my_mod.m)
# my_mod.test()
print(m)
test()
# print(n) # 报错,通过from <module_name> import * 导入模块, __all__ 里没有n,不能使用
import my_mod
print(my_mod.n) # 通过import导入,可以使用n
print(my_mod._age) # 报错,_age在my_mod模块中已经被删除了,不能使用
11.包的使用
# 可以将多个具有相似或者有关联的多个模块放到一个文件夹里,便于统一管理
# 这个文件夹,我们就可以称之为包
# python包里,会有一个 __init__.py
from chat import receive_message
from chat.send_message import x
# import chat
print(receive_message.y)
print(x)