目录
模块
模块:模块是一系列功能代码的结合体。
模块的三种来源:
1.python内置的 (python解释器,拿来用)
2.第三方的(别人写,拿来用)
3.自定义的(自己写,自己用,给别人用)
模块的四种表现形式:
1.使用python代码写的py文件(了解)
2.编译后的共享库DLL或者是C或者C++库(了解)
3.包下面带有__init__.py的一组py文件
- 包
- __init__.py
- 模块1.py
- 模块2.py
4.python解释器提供的内置py文件
入模块发生的事情
1.先执行当前执行文件,会产生当前执行文件的名称空间
2.加载被导入模块时,会执行被导入模块代码,会产生被导入模块中名称空间
3.将被导入模块中的名称空间加载到内存中
首次导入模块
只会加载一次,将加载后的模块的名称空间放入内存中,
下次获取名字时优先从内存中获取。
import demo
import demo
给模块起别名
import 模块 as 模块的别名
模块的两种导入方式
import 模块名 (不能加.py后缀)
from 包/模块 import 模块/模块中的名字(函数名或变量名)
解决循环导入问题的两种方式
- 在名字定义后导入模块
- 在函数内部导入模块,让被导入的模块加载到局部名称空间中。
包:
包是内部有__init__.py的文件夹,用于管理模块。
软件开发目录规范
- 项目的根目录: ATM
- conf: 存放配置文件
- core: 存放py文件,核心业务
- interface: 接口,做逻辑处理
- db: 存放数据的 文件
- log: 存放日志文件
- lib: 存放公共方法文件
- bin: 存放启动py文件
- readme: 项目说明书
- 不要bin目录,在外层添加启动文件
time模块
- 获取时间戳:给机器看的
time.time()
- 格式化时间(Format String): 给人类看的
年月日
time.strftime('%Y-%m-%d')
时分秒
time.strftime('%H-%M-%S')
time.strftime('%X')
- 格式化时间对象(struct_time)
time_obj = time.localtime(time.time())
time_obj.tm_year
datetime模块:
# 获取日期时间
datetime.datetime.today()
datetime.datetime.now()
datetime.date.today()
# 获取日期"隔间"对象
空的间隔_obj = datetime.datetime.timedelta()
print(空的间隔_obj) ---> 0:0:0
# 获取7天时间间隔
day7_obj = datetime.datetime.timedelta(days=7)
# 时间计算公式:
- 日期时间 = 日期时间 + or - 时间对象
- 时间对象 = 日期时间 + or - 日期时间
# 获取当前时间7天后的时间
day7_obj = datetime.datetime.timedelta(days=7)
- 日期时间 = 日期时间 + or - 时间对象
current_time = datetime.datetime.now()
later_time = current_time + day7_obj
print(later_time) # 2019-11-25 09:18:XX
random模块
- 可以随机获取数据
- 随机对数据进行操作
- random.random():
- 随机获取0——1之间的某一个小数。
- random.randint(1, 100):
- 随机获取1—100的某一个整数。
- random.choice(可迭代对象): 注意: 有索引的可迭代对象
- list, tuple
- 随机获取可迭代对象中某一个值
- random.shuffle(): 注意: 不可变类型不可被乱序
- list
可以对某个有索引的可迭代对象进行乱序。
- 随机获取手机短信验证码:
import random
def get_code(n):
res = ''
for line in range(n):
# 获取大小写字母
lower_str = chr(random.randint(97, 122))
upper_str = chr(random.randint(65, 90))
# 获取数字
number = str(random.randint(0, 9))
code_list = [lower_str, upper_str, number]
# 每次循环随机取一个值
code = random.choice(code_list)
res += code
return res
os模块
- 与操作系统交互
# 获取项目根目录,获取当前文件的目录
project_path = os.path.dirname(os.path.dirname(__file__))
# 路径的拼接
os.path.join()
# 判断文件或文件夹是否存在
os.path.exists() # 存在 True 不存在False
# 判断文件夹是否存在
os.path.isdir()
# 判断文件是否存在
os.path.isfile()
# 获取某个文件夹下所有文件的名字,然后装进一个列表中
file_list = os.listdir(文件夹的路径)
# 创建文件夹与删除文件夹
os.mkdir(文件夹路径) # 只传文件夹名字,会保存在当前执行文件的目录下
os.rmdir(文件夹路径) # 注意: 只能删除空的文件夹
enumerate: 获取可迭代对象中索引与值
enumerate(可迭代对象) # 注意: 可迭代對象中若是字典,则取字典中所有的key
返回的enumerate对象 ---> 相当于迭代器对象
list(迭代器对象) ---> 列表
sys模块
- 与python解释器交互的模块
sys.path # 获取python解释器的环境变量路径 ---》 list[一堆路径]
# 将当前项目根目录添加到环境变量中
sys.path.append(
当前项目的根目录路径
)
# 获取到操作系统中cmd(终端)的命令行
# 注意: 通过python执行py文件时,后面跟着的命令行
sys.argv ----》 执行py文件的权限认证
hashlib模块
- 加密模块
- MD5()
md5_obj = hashlib.md5()
md5_obj.update('123456'.encode('utf-8')) # 只能传bytes类型数据
sal = 'python13期是最好的一期学生!'
md5_obj.update(sal.encode('utf-8'))
# 拿到加密后的结果
res = md5_obj.hexdigest() # 必须要加括号
print(res) # ---> 加密后的字符串
hashlib.md5().update('123456'.encode('utf-8'))
hashlib.md5().hexdigest() # ---> 默认的加密字符串
序列化:
将其他数据类型转换成字符串,可以写入文件中。
反序列化
从文件中读取字符串,然后转成其他数据类型。
json
json.dumps():
python数据 ----> json数据 ----> 字符串 ----> 写入文件中
with open('文件名', 'w', encoding='utf-8') as f:
res = json.dumps(数据)
f.write(res)
json.loads():
从文件中读数据 ---》 字符串 ---》 json数据 ---》python数据
with open('文件名', 'r', encoding='utf-8') as f:
res = json.loads(f.read())
print(res) # python数据
json.dump():
with open('文件名', 'w', encoding='utf-8') as f:
json.dump(数据, f)
# 省略了f.write()
json.load():
with open('文件名', 'w', encoding='utf-8') as f:
# 省略了f.read()
json.load(f)
json数据
是一个第三方的特殊数据格式。
使用json数据格式的好处:
让不同语言的数据实现共享。
json模块的优缺点
优点:
- 支持跨平台,所有语言使用。
缺点:
- 可以支持python的数据类型有限。
- 存取速度相较于pickle要慢
pickle 模块的优缺点
优点:
- 可以支持python所有数据类型
- 可以直接写入bytes类型的数据
- 存取速度相较于json要快
缺点:
不支持跨平台,只能给python使用。
collections
- 具名元组
from collections import namedtuple
namedtuple('坐标', 'x y')
namedtuple('坐标', ['x', 'y'])
obj = namedtuple('坐标', ('x', 'y'))
new_obj = obj(10, 20)
print(new_obj) # 坐标(x=10, y=20) ---> 对象
- 有序字典
from collections import OrderedDict
# 基于python默认的字典,“派生” 而来的。
order_dict = OrderedDict({'x': 10, 'y': 20})
order_dict.get('x')
openpyxl
- 是一个第三方模块
pip3 install openpyxl
用来操作Excel文件的
- 如何创建
from openpyxl import WorkBook
wb_obj = WorkBook()
# 创建一个工作页
wb1 = wb_obj.create_sheet('工作页的名字', 工作页的索引)
wb1['A18'] = 200
wb_obj.save(r'D:项目路径python13期day17Excel文件名.xlsx')
- 如何读取
from openpyxl import load_workbook
wb_obj = load_workbook(r'D:项目路径python13期day17Excel文件名.xlsx')
wb1 = wb_obj['工作页的名字']
print(wb1['A18'].value) # 200