模块及常用的第三方模块

157 阅读6分钟

模块

模块的概念

  • 一个.py的Python文件就是一个模块

为什么要使用模块

  • 方便其他程序和脚本导入并使用
  • 避免函数名和变量名冲突的问题

模块命名的规则和规范

  • 全部小写字母,多个单词之间使用下划线分隔

注意事项

  • 不要与Python自带的标准模块名称相同

自定义模块

  • 实际上就是创建一个Python文件

模块的导入

  • 语法结构
import modulename as 别名
from modulename import 变量/函数/类等
# 使用通配符 * 导入所有
from modulename import *
# 同时导入多个模块
import math, time, random

导入不同模块中的同名函数

# 如果导入的模块中有同名的函数等,那么后导入的会将先导入的进行覆盖
from modulename1 import func
from modulename2 import func

# 解决方案 import
import modulename1
import modulename2

modulename1.func()
modulename2.func()

主程序运行

以主程序形式运行

  • 语法结构
if __name__=='__main__':
    pass
  • 以主程序运行,在该模块被导入其他模块时,该__main__中的代码将不会被执行

国内镜像源

清华:pypi.tuna.tsinghua.edu.cn/simple

阿里云:mirrors.aliyun.com/pypi/simple…

中国科技大学 pypi.mirrors.ustc.edu.cn/simple/

华中理工大学:pypi.hustunique.com/

山东理工大学:pypi.sdutlinux.org/

豆瓣:pypi.douban.com/simple/

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 库名

Python 中的包

  • 包是一个分层的目录结构,相当于(文件夹),将一组功能相近的模块组织在同一个包下
  • 起到代码规范的作用
  • 避免模块名称相冲突的情况

包与目录(文件夹的区别)

  • 包里会自带一个 __init__.py 的文件,在 __init__.py 文件中的代码,在导入包时会自动执行
  • 目录是普通的文件夹

包的使用

第一种导入方式

  • import 完整的包名.模块名

第二种导入方式

  • from 完整的包名 import 模块名称

第三种导入方式

  • from 完整的包名.模块名称 import 变量/函数/类等

Python 中常用的内置模块

标准库

  • Python自带的模块称为内置模块,标准模块或标准库
  • 标准库的数量大概270个左右

标准库的位置

C:\Users\Administrator\AppData\Local\Programs\Python\Python310\Lib

image.png

random模块

  • 用于产生随机数的标准库

image.png

image.png

image.png

image.png

image.png

time模块

  • Python提供的处理时间的标准库
  • 可用来进行时间处理、时间格式化的计时

image.png

image.png

image.png

格式化控制符

image.png

image.png

image.png

第三方模块的安装与卸载

第三方模块的安装

pip install 模块名称

第三方模块的卸载

pip uninstall 模块名称

pip命令的升级

python -m pip install -upgrade pip

requests模块

  • 用于处理HTTP(Hypertext Transfer Protocol 超文本传输协议)请求的第三方模块

常用函数

response = requests.get(url, headers)

响应结果

  • 字符串数据:response.text
  • 二进制数据:response.content
import requests
import re

url = 'http://www.weather.com.cn/weather1d/101130504.shtml'
# 设置请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36'
}

resp = requests.get(url, headers)   # resp 就是响应结果对象
# 设置响应的编码格式
resp.encoding='utf-8'
# print(resp.text)
city = re.findall('<span class="name">([\u4e00-\u9fa5]*)</span>', resp.text)
weather = re.findall('<span class="weather">([\u4e00-\u9fa5]*)</span>', resp.text)
wd = re.findall('<span class="wd">(.*)</span>', resp.text)
zs = re.findall('<span class="zs">([\u4e00-\u9fa5]*)</span>', resp.text)
# print(city)
# print(weather)
# print(wd)
# print(zs)
lst = []
for a,b,c,d in zip(city, weather, wd, zs):
    lst.append([a,b,c,d])

for item in lst:
    print(item)

url = 'https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png'
resp = requests.get(url, headers=headers)
# 将二进制数据写入磁盘
with open('logo.png', 'wb') as file:
    file.write(resp.content)

openpyxl模块

  • 用于处理Excel文件的模块,可以将Excel中的数据进行写入和读取

image.png

# 创建新的工作簿
workbook = openpyxl.Workbook()
# 创建工作表对象
sheet = workbook.create_sheet('景区天气')
for row in lst:
    sheet.append(row)
workbook.save('景区天气.xlsx')
# 打开Excel文件
wk = openpyxl.load_workbook('景区天气.xlsx')
# 选择要操作的工作表
sheet = wk['景区天气']
# 表格数据是一个二维数据,先读取行再读取列
lst = []
for row in sheet.rows:  # 行
    sublist = []  # 存储单元格数据
    for cell in row:  # 遍历单元格
        sublist.append(cell.value)  # 单元格的值 value
    lst.append(sublist)
for item in lst:
    print(item)

pdfplumber模块

  • 用于读取PDF文件中的内容

image.png

numpy模块

  • 数据分析中其他模块的依赖库,用于处理数组等操作
import numpy as np
import matplotlib.pyplot as plt

# 读取图片
n1 = plt.imread('logo.png')
# print(type(n1), n1)
# n1 为三维数组,最高维表示的是图像的高,次高维表示的是图像的宽,最低维[R, G, B]颜色
plt.imshow(n1)
# 编写灰度公式
n2 = np.array([0.299,0.587,0.114])
# 将数组n1(RGB)颜色值与数组n2(灰度公式固定值)进行点乘运算
x = np.dot(n1, n2)
# 传入数组,显示灰度
plt.imshow(x, cmap='gray')
# 显示图像
plt.show()

pandas模块

  • 数据分析中非常重要的模块,也可读取Excel数据
import pandas as pd
import matplotlib.pyplot as plt

# 读取Excel文件
df = pd.read_excel('景区天气.xlsx')  # DataFrame类型,pandas中重要的数据类型
print(df)
# 解决中文乱码问题
plt.rcParams['font.sans-serif'] = ['SimHei']
# 设置画布大小
plt.figure(figsize=(4, 6))
labels = df['景区']   # 获取景区这一列
y = df['机票价格']    # 机票价格
print(labels)
print(y)
# 绘制饼图
plt.pie(y, labels=labels, autopct='%1.1f%%')

# 设置x, y轴刻度一直,保证饼图是一个圆形
plt.axis('equal')

plt.title('票价占比')

# 显示出来
plt.show()

matplotlib模块

  • 数据可视化的模块,可用于绘制饼图、柱状图、折线图等

PIL库

  • 用于图像处理的第三方库
  • 安装模块的名称为pillow
from PIL import Image

# 加载图片
im = Image.open('logo.png')
# print(type(im), im)
# 提取RGB图像的颜色通道,返回结果是图像的副本
r,g,b,a = im.split()
# 合并通道,其中mode表示色彩,bands表示的是新的色彩通道
om = Image.merge(mode='RGBA', bands=(b, r, a, g))
om.save('new_logo.png')

wxPython模块

  • 是一个成熟且特性丰富的跨平台GUI工具包

Pygame模块

  • 专为电子游戏设计的模块

jieba库

  • 第三方中文文本分词库

image.png

image.png

image.png

image.png

image.png

wordcloud库

  • 根据文本生成词云图

Pyinstaller库

  • 用于将Python源代码进行打包,生成可执行文件的模块
  • 打包语法:pyinstaller -F 源文件

小练习

GUI实现登录页面

import wx


class MyFrame(wx.Frame):
    # 初始化方法
    def __init__(self, parent, id):
        wx.Frame.__init__(self, parent, id, title='用户登录', size=(400, 240))
        # 创建面板(容器)
        panel = wx.Panel(self)
        # 添加文本和输入框
        self.title = wx.StaticText(panel, label='请输入用户名和密码', pos=(140, 20))
        self.label_user = wx.StaticText(panel, label='用户名:', pos=(50, 50))
        self.text_user = wx.TextCtrl(panel, pos=(100, 50), size=(220, 25), style=wx.TE_LEFT)

        # 密码
        self.label_pwd = wx.StaticText(panel, label='密码:', pos=(50, 90))
        self.text_pwd = wx.TextCtrl(panel, pos=(100, 90), size=(220, 25), style=wx.TE_PASSWORD)

        # 两个按钮
        self.bt_login = wx.Button(panel, label='登录', pos=(105, 130))
        self.bt_cancel = wx.Button(panel, label='取消', pos=(225, 130))

        # 为按钮绑定单击事件
        self.bt_login.Bind(wx.EVT_BUTTON, self.OnClickLogin)
        self.bt_cancel.Bind(wx.EVT_BUTTON, self.OnClickCancel)

    def OnClickLogin(self, event):
        user = self.text_user.GetValue()  # 获取用户名
        pwd = self.text_pwd.GetValue()  # 获取密码
        if user == '' and pwd == '':
            message = '用户名或密码不能为空'
        elif user == 'ivan' and pwd == '123456':
            message = '登录成功'
        else:
            message = '用户名或密码不正确'

        # 弹框
        wx.MessageBox(message)

    def OnClickCancel(self, event):
        self.text_user.SetValue('')  # 清空用户名
        self.text_pwd.SetValue('')  # 清空密码


# 主函数程序
if __name__ == '__main__':
    app = wx.App()  # 启动应用
    frame = MyFrame(None, -1)
    frame.Show()
    app.MainLoop()

词云图

要用Python3.8才行,3.8以上的版本不行

import jieba
from wordcloud import WordCloud

# 读取文本文件中的内容
with open('students1.txt', 'r', encoding='utf-8') as file:
    s = file.read()

# 中文分词
lst=jieba.lcut(s)
stopword = ['嘿嘿', '哈哈']  # 排除词
txt = ''.join(lst)

# 绘制词云图
wordcloud = WordCloud(background_color='white', font_path='msyh.ttc', stopwords=stopword,
                      width=800, height=600)
# 由txt生成词云图
wordcloud.generate(txt)

# 保存成图片
wordcloud.to_file('词云图.png')