目录
一. 模块
Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。 模块能定义函数,类和变量,模块里也能包含可执行的代码
1.1. 导入模块
1.1.1 导入模块的方式
- import 模块名
- from 模块名 import 功能名
- from 模块名 import *
- import 模块名 as 别名
- from 模块名 import 功能名 as 别名
1.1.2 导入方式详解
1.1.2.1 import
语法
# 1. 导入模块
import 模块名
import 模块名1, 模块名2...
# 2. 调用功能
模块名.功能名()
体验
import math
print(math.sqrt(9)) # 3.0
1.1.2.2 from..import..
语法
from 模块名 import 功能1, 功能2, 功能3...
体验
from math import sqrt
print(sqrt(9))
1.1.2.3 from .. import *
语法
from 模块名 import *
体验
from math import *
print(sqrt(9))
1.1.2.4 as定义别名
语法
# 模块定义别名
import 模块名 as 别名
# 功能定义别名
from 模块名 import 功能 as 别名
体验
# 模块别名
import time as tt
tt.sleep(2)
print('hello')
# 功能别名
from time import sleep as sl
sl(2)
print('hello')
1.2. 制作模块
在Python中,每个Python文件都可以作为一个模块,模块的名字就是文件的名字。也就是说自定义模 块名必须要符合标识符命名规则。
1.2.1 定义模块
新建一个Python文件,命名为 my_module1.py ,并定义 testA 函数。
def testA(a, b):
print(a + b)
1.2.2 测试模块
在实际开中,当一个开发人员编写完一个模块后,为了让模块能够在项目中达到想要的效果,这个开发 人员会自行在py文件中添加一些测试信息.,例如,在 my_module1.py 文件中添加测试代码。
def testA(a, b):
print(a + b)
testA(1, 1)
此时,无论是当前文件,还是其他已经导入了该模块的文件,在运行的时候都会自动执行 testA 函数的调用。
1.2.3 调用模块
import my_module1
my_module1.testA(1, 1)
1.3. 模块定位顺序
当导入一个模块,Python解析器对模块位置的搜索顺序是:
- 当前目录
- 如果不在当前目录,Python则搜索在shell变量PYTHONPATH下的每个目录。
- 如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/
模块搜索路径存储在system模块的sys.path变量中。变量里包含当前目录,PYTHONPATH和由安装过 程决定的默认目录。
- 注意
- 自己的文件名不要和已有模块名重复,否则导致模块功能无法使用
- 使用from 模块名 import 功能 的时候,如果功能名字重复,调用到的是最后定义或导入的 功能。
1.4. __all__
如果一个模块文件中有 __all__ 变量,当使用 from xxx import * 导入时,只能导入这个列表中的元 素。
- my_module1模块代码
__all__ = ['testA']
def testA():
print('testA')
def testB():
print('testB')
- 导入模块的文件代码
from my_module1 import *
testA()
testB()
1.5 第三方模块的下载
第三方模块在使用前需要进行下载,那么建议在命令行cmd中使用pip进行下载,pip是python自带的下载器
#下载模块
pip install 模块名
#卸载模块
pip uninstall 模块名
#更新pip 只要能下载模块 就不需要更新
python -m pip install --upgrade pip - i
1.6常用模块:
1.6.1 time 模块
import time
#格林威治时间 1970-1-1
print(time.time())
#让程序休眠/暂停
time.sleep(3)
print('我休息了3秒钟')
#获取当前时间
res = time.localtime()
print(rs)
# 获得格式化的当前时间
res1 = time.asctime(time.localtime())
print(res1)
"""
tm_year=2022 当前年份
tm_mon=4 当前月份
tm_mday=15 当前日期
tm_hour=20 当前的小时
tm_min=10 当前的分钟数
tm_sec=34 当前秒数
tm_wday=4,
tm_yday=105,
tm_isdst=0
"""
1.6.2 os模块
import os
#获取当前文件所在的目录
print(os.getcwd())
#新建文件夹
print(os.mkdir('test'))
#删除文件夹,只能删除空白的文件夹
print(os.rmdir('test'))
#对文件进行重命名
print(os.rename('os1.txt','os1.py'))
#判断文件是否存在
print(os.path.exists('os1.py'))
#将三列的部分组成完整的路径
print(os.path.join('python-65','day17','os.py'))
## 保留路径去掉文件名
print(os.path.dirname('Python_65\Day17\os.py'))
print(os.path.join(os.path.dirname('Python_65\Day17\os.py') ,'os1.py'))
# 保留文件名去掉路径
print(os.path.basename('Python_65\Day17\os1.py'))
1.6.3 sys模块
import sys
#系统模块
#系统项目与环境位置
print(sys.path)
#获取当前文件的位置
print(sys.argv)
print('=' * 50)
#获取当前python版本信息
print(sys.version)
#获取当前的操作系统
print(sys.platform)
1.6.4 json模块
将python的数据格式 转换为json格式的数据,也可以将json格式的数据转换为python的数据格式。 json格式,是一个数据格式(本质上就是个字符串,常用语网络数据传输) python的数据类型转换为 json 格式,对数据类型是有要求的,默认只支持:
我们就用json模块的四个功能 dump load dumps loads
json.dump(第一个参数是要转换的数据类型,第二个参数是一个文件句柄就是要存到那个文件中)
json.load(这里放一个文件句柄,就要用从那个文件中读取内容)
dumps是将python中的数据类型转成字符串:dumps(参数是要转换的数据类型)
loads是将json的数据类型转换成python的数据类型:loads(要转换成原数据类型的python类型)
'''
json 是一种文件的存储格式,可以被大部分编程语言所识别 跨语言 跨平台
json 存储的数据是为序列数据
序列化与反序列化
序列数据:计算机底层所识别的机器码(0,1)
反序列数据:我们能看懂的数据
'''
import json
ls = 22
#序列化
data = json.dumps(ls)
print(type(ls))
print(data)
print(type(data))
#反序列化
data_1 = json.loads(data)
print(data_1)
print(type(data_1))
ls = ['鸡肉','鸭肉','罐头']
data = josn.dumps(ls)
print(data)
res = josn.loads(data)
print(res)
1.6.5 re模块
功能:用来匹配字符串 爬虫用的比较多
import re
'''
'.' 匹配任意一个字符 , \n 除外
'+' 匹配前一个字符多次
'''
# 1 从头匹配 match()
res = 'ac\t123guang123'
msg = re.match('.',res)
# print(msg)
# print(msg.group())
msg = re.match('............',res)
# print(msg.group())
msg = re.match('.+' , res)
# print(msg.group())
# search() 整个文本进行搜索
# 匹配指定开头跟结尾
msg = re.search('.+1',res)
# print(msg.group())
msg = re.search('g.+' , res)
# print(msg.group())
msg = re.search('g.+1',res)
# print(msg.group())
msg = re.search('3[a-z]+g',res)
print(msg.group())
msg = re.search('3[0-9a-z]+2',res)
print(msg.group())
res_2 = '12ab34cd56ef78gh'
# split() 分割
msg = re.split('[a-z]+',res_2)
print(msg)
msg = re.split('[0-9]+',res_2)
print(msg)
res3 = 'aabcAA'
msg = re.search('a|A',res3)
print(msg.group())
1.6.6 hashlib 模块
Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等。摘要算法又称哈希算法、散列算法。 把任意长度的数据转换为一个长度固定的数据串。
import hashlib
哈希 是一种算法 一种规则 通过接受一个值来生成一串hash值
作用:密码生成,提高安全性
特点:1.传入的内容是一样的 hash值也是一样的
2.hash值正常来说不能破解
3.不管文件是啥 有多大 最后得到的哈希值长度都是固定的32位
hash_object = hashlib.md5()
hash_object.update('中直通教育'.encode('utf-8'))
result = hash_object.hexdigest()
print(result)
import hashlib
hash_object = hashlib.md5("iajfsdunjaksdjfasdfasdf".encode('utf-8'))
hash_object.update("中职通教育".encode('utf-8'))
result = hash_object.hexdigest()
print(result)
二. 包
包将有联系的模块组织在一起,即放到同一个文件夹下,并且在这个文件夹创建一个名字为 __init__.py 文件,那么这个文件夹就称之为包。
2.1 制作包
[New] — [Python Package] — 输入包名 — [OK] — 新建功能模块(有联系的模块)。 注意:新建包后,包内部会自动创建 __init__.py 文件,这个文件控制着包的导入行为。
2.1.1 快速体验
- 新建包 mypackage
- 新建包内模块: my_module1 和 my_module2
- 模块内代码如下
# my_module1
print(1)
def info_print1():
print('my_module1')
# my_module2
print(2)
def info_print2():
print('my_module2')
2.2 导入包
2.2.1 方法一
import 包名.模块名
包名.模块名.目标
2.2.1.1 体验
import my_package.my_module1
my_package.my_module1.info_print1()
2.2.2 方法二
注意:必须在 __init__.py 文件中添加 __all__ = [] ,控制允许导入的模块列表。
from 包名 import *
模块名.目标
2.2.2.1 体验
from my_package import *
my_module1.info_print1()
三、总结
- 导入模块方法
import 模块名
from 模块名 import 目标
from 模块名 import *
- 导入包
import 包名.模块名
from 包名 import *
__all__ = [] :允许导入的模块或功能列表