14.Python 模块
目录
- 1. 使用模块
- 2. 使用包
- 3. 常用模块
- 3.1 日期和时间
- 3.2 伪随机数
- 3.3 摘要算法
- 3.4 JSON 处理
- 3.5 图像处理
模块是Python用来组织代码的一种方法,包是Python用来组织模块的一种方法。
常用基本语法如下:
'''Windows 按住win+R 输入 cmd,Mac 打开Terminal'''
pip install 模块名 # 安装模块
pip uninstall 模块名 # 卸载模块
pip list # 查看所安装的模块
'''
import 模块名
import 模块名 as 别名
from 模块名 import 成员 # 导入单个成员
from 包 import 模块
from 包.子包 import 模块
from 包.子包.模块 import 成员
常见问题:No module named XXXX
# Windows 按住win+R 输入 cmd,Mac 打开Terminal,输入以下命令
pip install XXXX
如果根据上面部分还是不能解决,则在要执行文件中开头添加以下命令:
import sys
import os
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
1. 使用模块
Python 把能够相互包含,且有组织的代码段称为模块(module)。使用模块的好处如下:
- 提高代码的可维护性。
- 提高代码的可重用性。
- 避免命名冲突和代码污染。
文件能够在物理层面组织模块,一个文件被看作是一个独立模块,一个模块也可以被看作一个文件。模块的文件名就是模块的名字加上扩展名.py。在.py文件中可以包含类、函数、变量、可运行的代码等。模块也可以被其他模块、脚本、交互式解析器导入(import),也可以被其他程序引用。
Python 模块一般位于安装目录下Lib文件夹中,执行help(“moduels”)命令,可以查看已经安装的所有模块列表。模块可以分为3种类型:
- 内置标准模块:Python 预安装了很多标准模块,如
sys、time、json模块等。 - 第三方开源模块:由第三方商业公司或个人开发,并免费分享到网上的模块。用户使用的大部分模块都是这种类型。
- 自定义模块:由开发者自己开发的模块,方便在脚本中使用
自定义模块的名字不能与系统模块重名,否则有覆盖内置模块的风险。例如,自定义一个
sys.py模块后,就不能够使用系统的sys模块。
使用第三方模块时,有2种方法:
1.使用pip命名安装。
'''Windows 按住win+R 输入 cmd,Mac 打开Terminal'''
pip install 模块名 # 安装模块
pip uninstall 模块名 # 卸载模块
pip list # 查看所安装的模块
2.通过下面网址下载模块并安装模块。下载.whl或者.gz文件,在命令行进入到文件目录,使用pip install 文件名或者 python [setup.py](http://setup.py) install
- PyPi官网:https://pypi.org
- Gohlke:https://www.lfd.uci.edu/~gohlke/pythonlibs/
使用import语句可以导入模块,模块名不包含.py扩展名。如果模块名比较长,在导入时可以起一个别名。
# 导入模块
import 模块名1
import 模块名2
import 模块名1[,模块名2,..,模块名N]
# 导入模块并起别名
import 模块名1 as 别名
所有的模块在开头部分导入,并且建议遵循如下顺序:
- Python 标准模块。
- Python 第三方模块。
- 自定义模块。
一个模块无论被导入多少次,它只被加载一次,当Python解释器在源代码中遇到import关键字时,自动在搜索路径(sys.path)中搜寻对应的模块,如果发现在函数中导入,那么它的作用域是局部的。
搜索路径是一个目录列表,被存储在sys模块中的path变量中,供解释器在导入模块时参考,可以事先配置,或者在源代码中设置。
import sys # 导入sys模块
for i in sys.modules: # 遍历所有导入的模块print(i,end='\n')dir(sys) # 查看该模块中可用的成员# 兼容导入适配的模块版本
try:import json # python 2.6版本后
except ImportError:import simplejson as json # python 2.5版本前
使用from-import语句可以将指定模块中的成员名称导入当前作用域中,如函数、类或变量等,语法和示例如下:
from 模块名 import 成员 # 导入单个成员
from 模块名 import 成员1[,成员2,...,成员N] # 导入多个成员
from 模块名 import * # 导入所有成员from time import * # 导入time模块中所有成员
print(dir()) # 查看导入的所有成员名称
2. 使用包
包是Python组织模块的一种逻辑方法,是一个有层次的目录结构,它定义了由多个模块或多个子包组成的Python应用程序运行环境。一个文件夹就是一个包,包的名称就是文件夹的名称,包可以相互嵌套。包的好处如下:
- 为名称空间加入有层次的组织结构。
- 允许开发人员把有联系的模块组合到一起。
- 允许分发者使用目录结构而不是一大堆混乱的文件。
- 解决同一个允许环境中导入模块重名问题。
创建包就是创建文件夹。
包文件夹下存在一个名为__init__.py的文件,用于标识当前文件夹是一个包,建议创建包时都添加__init__.py该文件。init.py可以是一个空文件,也可以初始化设置代码。
导入包有两种方法:
- 绝对路径导入:通过指定“包.模块.名字”的完整路径进行导入。
- 相对路径导入:在一个包(package)的内部,模块之间可以使用相对路径导入。
- 在导入路径前面添加1个点号(.),表示当前目录。
- 在导入路径前面添加2个点号(…),表示父级目录。
import 包
import 包.子包
# 常用形式1
import 包.子包.模块
# 常用形式2
from 包 import 模块
from 包.子包 import 模块
from 包.子包.模块 import 成员
使用相对路径导入,必须是一个完整的项目,切必须从入口程序开始执行。
3. 常用模块
3.1 日期和时间
操作日期和时间的内置模块有:time、datetime、calendar。
time 是基础模块,可满足对时间类型数据的基本处理;
时间也是一种数据类型,分3种形式:时间戳(timestamp)、结构化时间(struct_time)、格式化的时间字符串(format string)。
import time # 导入time模块
print(time.time()) # 返回当前时间戳,浮点数:1700636693.016157
'''返回结构化时间,一个元组:
time.struct_time(tm_year=2023, tm_mon=11, tm_mday=22,
tm_hour=15, tm_min=6, tm_sec=30,
tm_wday=2, tm_yday=326, tm_isdst=0)
'''
print(time.localtime())
print(time.ctime()) # 返回当前本地时间的字符串:Wed Nov 22 15:06:30 2023
print(time.strftime('%Y-%m-%d %H:%M:%S')) # 2023-11-22 15:16:00
datetime 模块是对time模块进行高级封装,功能更强大,使用更方便;
包含6个字类型:
datetime.date:表示日期,常用的属性有year、month、day。datetime.time:表示时间,常用属性有hour、minute、second、microsecod。datetime.datetime:表示日期时间datetime.timedelta:表示两个date、time、datetime实例之间的时间间隔。datetime.tzinfo:时区对象。datetime.timezone:tzinfo的子类,表示时区,计算UTC的偏移量。
import time
import datetime
# 获取当前时间
print(datetime.datetime.now()) # 2023-11-22 15:35:44.190278
print(datetime.datetime.today()) # 2023-11-22 15:35:44.190382
# datetime 和结构化时间之间相互转换
print(datetime.datetime(year=2023,month=11,day=22,hour=15,minute=30,second=00)) # 2023-11-22 15:30:00
print(datetime.datetime.now().timetuple()) # 转换为结构化时间元组
# datetime和时间戳之间相互转换
print(datetime.datetime.timestamp(datetime.datetime.now()))
print(datetime.datetime.fromtimestamp(1700638527.603307))
# datetime和时间字符串之间的相互转换
dt = datetime.datetime.now()
print(dt.strftime('%Y=%m-%d %H:%M:%S')) # 2023=11-22 15:44:19
print(dt + datetime.timedelta(hours=8)) # 2023-11-22 23:44:19.150674
calendar 模块用于处理日历相关;
import calendar
n = calendar.month(2023,11)
print(n)
3.2 伪随机数
random 内置模块,能够实现各种分布的伪随机数。
random.random():用于生成(0<=n<1.0)的浮点数。random.unform(a,b):用于生成(a<=n<b)的浮点数。random.randint(a,b):用于生成(a<=n<=b)的整数。random.randirange([start=0], stop[,step=1]):指定范围内,按指定步长递增的集合中获取一个随机数。random.choice(sequence):从参数序列sequence对象中获取一个随机元素。random.shuffle(x[,random]):将一个列表中的元素打乱。random.sample(sequence,k):从指定序列sequence中随机获取指定长度的片段。
import random
print(random.random()) # 产生[0,1)浮点数 0.10565535904276113
print(random.uniform(1.1,5.4)) # 产生[1.1,5.4)浮点数 2.2114464386429304
print(random.randint(1,10)) # 产生[0,1]整数 4
print(random.choice([1,2,3,4,5,6,7,8,9,0])) # 从序列中随机选取一个元素 9
print(random.randrange(1,100,2)) # 生成 1~ 100的间隔2的随机整数 79
a = [1,3,5,7,8]
random.shuffle(a) # 将序列a中元素顺序打乱
print(a) # [5, 8, 1, 3, 7]
3.3 摘要算法
hashlib 内置模块包含hash和md5加密方法,这种加密是不可逆的,也称摘要算法。
hash 为哈希,表示把任意的输入,通过某种hash算法,转换成固定长度的输出,这个输出值就是散列值,也称摘要值,算法为哈希函数,摘要函数。
MD5 是最常见的摘要算法,速度快,生成结果是固定的16字节,通常用一个32位的十六进制字符串表示。
常用的方法有如下:
md5()、sha1():加密算法,获取一个加密的哈希对象。update():用参数字符串更新哈希对象。digest():以二进制数据字符串返回摘要信息。hexdigest():以十六进制数据字符串返回摘要信息。copy():复制哈希对象。
import hashlib # 导入加密模块
s = 'Python' # 待加密的字符串
md5 = hashlib.md5() # md5加密
md5.update(s.encode('utf-8')) # 注意转码
r = md5.hexdigest() # 返回十六进制的数据字符串值
print(r) # a7f5f35426b927411fc9231b56382173
3.4 JSON 处理
JSON 是一种广泛应用的轻量级的数据交换格式,字典格式,其中包含方括号起来的数组,也就是列表。
json 提供了4中方法来实现Python对象与JSON对象进行快速交换。
dumps():将Python对象序列化为JSON字符串表示。dump():将Python对象序列化为JSON字符串,然后保存到文件中。loads():把JSON格式的字符串反序列化为Python对象。loas():从文件中读取内容,然后读取的字符串反序列化为Python对象。
import json
a = {'name':'Tom','age':23}
b = json.dumps(a) # 把序列化Python对象转换为JSON格式字符串
print(type(a)) # <class 'dict'>
print(b,type(b)) # {"name": "Tom", "age": 23} <class 'str'>
c = json.loads(b) # 把JSON格式字符串转换序列化Python对象
print(c['name']) # Tom
print(type(c)) # <class 'dict'>with open('test.json','w',encoding='utf-8') as f:
# indent 表示格式化保存字符串,默认为None,小于0个空格json.dump(a,f,indent=4) # 将字典对象序列化字符串# f.write(json.dumps(a,indent=4)) # 与json.dump()效果一样with open('test.json','r',encoding='utf-8') as f:d = json.load(f) # 转换python对象f.seek(0) # 重写把文件指针移到文件开头e = json.loads(f.read()) # 与json.load(f)执行效果一样print(d) # {'name': 'Tom', 'age': 23}
print(e) # {'name': 'Tom', 'age': 23}
3.5 图像处理
Python Imaging Library 是免费的图像处理工具包,是Python平台上的图像处理标准库。PIL提供强大的图形、图像处理功能,API使用简单。
- 支持数十种格式,如PNG、JPEG、BMP、GIF、TIFF等。
- 支持黑白、灰阶、RGB、CMYK等多种色彩模式。
- 图像基本操作,如裁切、平移、旋转、改变尺寸、调置、剪切、粘贴等
- 图像色彩处理,如亮度、色调、对比、锐利度等。
- 支持十多种滤镜。
- 在图像中绘制点、线、面、几何形状、文字等。
图像的基本操作:
open():打开图像new():创建新图像show():显示图像save():保存图像copy():复制图像
图像基本属性
format:图像来源size:图像大小mode:图像模式
图像变换操作
resize():改变图像大小rotate():旋转图像transpose():翻转图像convert():转换图像filter():特效处理
图像合成、裁切、分离等操作
blend():合成图像crop():裁切图像paste():粘贴图像split():根据颜色通道分离图像merge():核查单一图像
图像像素点操作:
point():对每个像素点执行一次函数调用操作getpixel():获取指定像素点的颜色值putpixel():为指定像素点设置颜色值
from PIL import Image
im = Image.open('/Users/guanfawang/Downloads/Untitled-89.png')
w,h = im.size
print(w,h) # 506 526
a = im.resize((w//2,h//2)) # 改变尺寸
a.save('/Users/guanfawang/Downloads/a.png') # 保存新尺寸图像
a.rotate(90) # 旋转90度
a.show() # 打开查看图像'''
设计生成验证码图片
'''
# 第一步:从PIL模块中导入图像类、绘图类、图像字体类和图像特效类
from PIL import Image,ImageDraw,ImageFont,ImageFilter
# 第二步:初始化设置
import random # 导入随机数模块
def rndchar(): # 随机字母return chr(random.randint(65,90))
def rndcolor1(): # 随机颜色1return (random.randint(64,255),random.randint(64,255),random.randint(64,255))
def rndcolor2(): #随机颜色2return (random.randint(32,127),random.randint(32,127),random.randint(32,127))
width = 60*4 # 初始化图像宽度,单位为像素
height = 60 # 初始化图像高度,单位为像素
# 第三步:创建图像对象、字体对象、绘图对象
image = Image.new('RGB',(width,height),(255,255,255)) # 创建Image对象
font = ImageFont.truetype('arialuni.ttf',36) # 创建Font对象
draw = ImageDraw.Draw(image) # 创建Draw对象
# 生成麻点背景
for x in range(width): # 使用随机颜色绘图for y in range(height):draw.point((x,y),fill=rndcolor1())
# 在画布上生成随机字符
for t in range(4): # 输出4个随机字符draw.text((60*t+10,10),rndchar(),font=font,fill=rndcolor2())
image = image.filter(ImageFilter.BLUR) # 模糊化处理
# 第四步:保存图像
image.save('code.jpg','jpeg')
相关文章:
14.Python 模块
目录 1. 使用模块2. 使用包3. 常用模块3.1 日期和时间3.2 伪随机数3.3 摘要算法3.4 JSON 处理3.5 图像处理 模块是Python用来组织代码的一种方法,包是Python用来组织模块的一种方法。 常用基本语法如下: Windows 按住winR 输入 cmd,Mac 打开…...
三十分钟学会Linux的基本操作
GNU/Linux GNU项目是由Richard Stallman发起的自由软件运动,旨在创建一个完全自由的操作系统。虽然GNU项目已经开发了大量的系统组件和工具,但它一直缺少一个完整的操作系统内核。在这时Linus Torvalds开发了Linux内核,并将其发布为自由软件…...
1688商品详情数据接口(1688.item_get)
1688商品详情数据接口是一种程序化的接口,通过这个接口,商家或开发者可以使用自己的编程技能,对1688平台上的商品信息进行查询、获取和更新。这个接口允许商家根据自身的需求,获取商品的详细信息,例如价格、库存、描述…...
SA实战 ·《SpringCloud Alibaba实战》第14章-服务网关加餐:SpringCloud Gateway核心技术
大家好,我是冰河~~ 一不小心《SpringCloud Alibaba实战》专栏都更新到第14章了,再不上车就跟不上了,小伙伴们快跟上啊! 在《SpringCloud Alibaba实战》专栏前面的文章中,我们实现了用户微服务、商品微服务和订单微服务之间的远程调用,并且实现了服务调用的负载均衡。也基…...
设计师不能忽视的几个宝藏图标设计工具
在这个快速变化的时代,设计师对创新和实用工具的需求越来越大。这就要求我们及时跟上潮流,不断探索和尝试最新、最有价值的图标设计工具。只有这样,我们才能在竞争激烈的设计市场中脱颖而出。以下是我们精心挑选的2024年值得一试的图标设计工…...
设计模式-行为型模式-模板方法模式
一、什么是模板模式 模板方法模式(Template Method Pattern)是一种行为型设计模式,它定义了一个算法骨架,允许子类在不改变算法整体结构的情况下重新定义算法的某些步骤。 主要组成部分: 1、模板方法(Templ…...
露营管理系统预约小程序效果如何
旅游经济已经复苏,并且市场规模增速加快,近一年来远途/周边游客户增多,不少旅游景区在节假日常常面对客流爆满现象。同时露营作为近几年突然火热的项目,其需求也是日渐上升。 然而在高需求的同时,我们也看到露营经营痛…...
【产品安全平台】上海道宁与Cybellum将整个产品安全工作流程整合到一个专用平台中,保持构建的互联产品的网络安全和网络合规性
Cybellum将 整个产品安全工作流程 整合到一个专用平台中 使设备制造商能够 保持他们构建的互联产品的 网络安全和网络合规性 产品安全性对 每个人来说都不一样 每个行业的系统、工作流程和 法规都存在根本差异 因此,Cybellum量身定制了 Cybellum的平台和技…...
css 实现鼠标上移添加下划线
效果图 实现代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-wi…...
C语言--给定一个数组,把第一项的值减去第二项的值,第二项的值减去第三项的值,第三项的值减去第四项的值,依次类推。放到一个新的数组中,并打印新的数组
一.题目描述: 给定一个数组,把第一项的值减去第二项的值,第二项的值减去第三项的值,第三项的值减去第四项的值,依次类推。放到一个新的数组中,并打印新的数组。 比如:输入一个数组是5ÿ…...
Vue+Swiper实现轮播图效果
效果展示 实现了自带切换按钮在图片外部实现了自定义的切换按钮 背景 在项目中使用到了轮播图,实现点击上一张下一张时实现循环显示,同时预览两个图片,并加以文字对图片的说明。 设计 使用 Swiper 插件,可以实现当前这个需求。…...
竞赛选题 行人重识别(person reid) - 机器视觉 深度学习 opencv python
文章目录 0 前言1 技术背景2 技术介绍3 重识别技术实现3.1 数据集3.2 Person REID3.2.1 算法原理3.2.2 算法流程图 4 实现效果5 部分代码6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习行人重识别(person reid)系统 该项目…...
解决vue中引入天地图显示不全问题,设置setTimeout即可解决!
index.html中引入天地图api <script type"text/javascript" src"https://api.tianditu.gov.cn/api?v4.0&tk你的key"></script>map.vue中初始化天地图 //初始化天地图 initTMap() {const T window.T;// 3.初始化地图对象this.tMap new…...
【OpenCV实现图像:使用OpenCV进行物体轮廓排序】
文章目录 概要读取图像获取轮廓轮廓排序小结 概要 在图像处理中,经常需要进行与物体轮廓相关的操作,比如计算目标轮廓的周长、面积等。为了获取目标轮廓的信息,通常使用OpenCV的findContours函数。然而,一旦获得轮廓信息后&#…...
【8】Spring Boot 3 集成组件:安全组件 spring security【官网概念篇】
目录 【8】Spring Boot 3 集成组件:安全组件 spring securitySpring Security 简介先决条件引入依赖身份验证密码存储密码存储历史DelegatingPasswordEncoder密码存储格式密码加解密类自定义密码存储 体系结构 ArchitectureServlet 过滤器DelegatingFilterProxyFilt…...
UDP中connect的作用
udpclientNoConnect.c里边的内容如下: #include<stdio.h> #include<stdlib.h> #include<string.h> #include<unistd.h> #include<arpa/inet.h> #include<sys/socket.h> #include <errno.h> #include <syslog.h…...
Go使用开源库go-excelize操作Excel文件
以下是一个示例代码,读取一个 Excel 文件并打印其中的所有单元格值: package mainimport ("fmt""github.com/30x/go-excelize" )func main() {// 打开 Excel 文件f, err : excelize.OpenFile("yourfile.xlsx")if err ! n…...
软件测试个人求职简历该怎么写,模板在这里
1、个人资料 姓名:xxx性别:x 手机号码:138888888xx邮箱:xxx 学历:本科专业:电子商务 英语:四级当前工作:测试工程师 从业时间:4年期望薪资:面议 求职意向软件…...
opencv-Hough 圆环变换
Hough 圆环变换(Hough Circle Transform)是一种用于在图像中检测圆环的技术。与 Hough 直线变换类似,它通过在参数空间中表示图像中的圆环,将圆环检测问题转换为参数空间的累加问题。OpenCV 提供了 cv2.HoughCircles() 函数来执行…...
福州大学《嵌入式系统综合设计》实验五:图像裁剪及尺寸变换
一、实验目的 在深度学习中,往往需要从一张大图中裁剪出一张张小图,以便适应网络输入图像的尺寸,这可以通过bmcv_image_crop函数实现。 实践中,经常需要对输入图像的尺寸进行调整,以适用于网络输入图片尺寸࿰…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
windows系统MySQL安装文档
概览:本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容,为学习者提供全面的操作指导。关键要点包括: 解压 :下载完成后解压压缩包,得到MySQL 8.…...
如何应对敏捷转型中的团队阻力
应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中,明确沟通敏捷转型目的尤为关键,团队成员只有清晰理解转型背后的原因和利益,才能降低对变化的…...
Oracle11g安装包
Oracle 11g安装包 适用于windows系统,64位 下载路径 oracle 11g 安装包...
