python 进阶

python 进阶

模块

在整个python中,一个.py文件就是一个模块,模块的名字就是文件名。在引入模块时,默认是在项目中查找模块和包名。

模块的导入方式

  • 导入整个模块:import module_name [as alias]
  • 导入特定的函数:from module_name import function_name
  • 导入模块中的所有函数:from module_name import *|func|{变量名}
# 导入的模块包含模块内的变量、函数、类等,自己写的.py文件也可以作为模块导入
import module_name [as alias]
module_name.function_name()
alias.function_name()

from module_name import function_name
function_name()

from module_name import *|func|{变量名}
function_name()

# 若是以 * 导入,会导入所有的函数、变量等,然后直接使用函数、变量
function_name()


# 若是函数名与自己定义的函数名相同,会覆盖掉
# 解决办法:将两个模块相同的文件以模块名区分,然后通过模块名调用方法
import module_name 
import module_name2 
module_name.function_name()
module_name2.function_name()


# 查找模块包名
my_project
├── project_dir
    ├──sys
    │  └──my_module.py
import sys.my_module as a
# 上面的意思是查找文件夹 sys 下的模块 my_module ,然后将其重命名为 a 进行调用
# 若是引入的模块与当前编辑的文件在同一个目录下,直接使用模块名进行调用 
# 同层级加目录会报(注意:模块名不能以数字开头)
# ModuleNotFoundError: No module named 'my_module'

模块的导入问题 一般来说,依赖或者公共模块内都没有立即执行或者打印的语句,但是在自定义的模块或者调用他人的模块时,会出现打印的语句,这是因为导入模块时,会执行模块内的语句。 解决办法:

  • 模块内的语句放在 if name == 'main' 内,然后调用函数

if __name__ == '__main__'
    # 模块内的语句,将之前的代码放到下面

常见模块

在安装python时,会自带一些模块,这些模块可以直接使用。比如在pycharm中,项目文件下外部库的lib文件夹下,就是python自带的模块。 常见的模块有:

  • os:操作系统相关的模块
  • sys:系统相关的模块
  • time:时间相关的模块
  • datetime:日期时间相关的模块
  • random:随机数相关的模块
  • math:数学相关的模块
  • json:json相关的模块
  • re:正则表达式相关的模块
  • collections:集合相关的模块
  • functools:函数相关的模块
  • itertools:迭代器相关的模块
  • multiprocessing:多进程相关的模块
  • threading:多线程相关的模块
  • asyncio:异步IO相关的模块
  • aiohttp:异步HTTP相关的模块
  • requests:HTTP相关的模块
  • beautifulsoup4:HTML解析相关的模块
  • selenium:自动化测试相关的模块
  • pytest:测试框架相关的模块
  • flask:Web框架相关的模块
  • django:Web框架相关的模块
  • sqlalchemy:数据库ORM相关的模块
  • pymysql:MySQL数据库相关的模块
  • pymongo:MongoDB数据库相关的模块
  • redis:Redis数据库相关的模块
  • celery:任务队列相关的模块
  • celerybeat:定时任务相关的模块
  • celeryd:任务执行器相关的模块
  • celeryflower:任务监控相关的模块
  • celerycam:任务监控相关的模块
  • celeryev:任务监控相关的模块
  • celerymon:任务监控相关的模块
  • celeryworker:任务执行器相关的模块

random模块 是Python中用于产生随机数的标准库

函数名称功能描述
seed(x)初始化给定的随机数种子,默认为当前系统时间
random()产生一个[0.0,1.0)之间的随机小数
randint(a,b)生成一个[a,b]之间的整数
randrange(m,n,k)生成一个[m,n)之间步长为k的随机整数
uniform(a,b)生成一个[a,b]之间的随机小数
choice(seq)从序列中随机选择一个元素
shuffle(seq)将序列seq中元素随机排列,返回打乱后的序列
import random
# 初始化给定的随机数种子,默认为当前系统时间
random.seed(10)

# 随机验证码
# 随机生成一个6位的验证码,包含数字和字母
def random_num():
    return str(random.randint(0,9)) # 数字
def random_upper():
    return chr(random.randint(65,90)) # 大写字母
def random_lower():
    return chr(random.randint(97,122)) # 小写字母

# 随机生成一个6位的验证码,包含数字和字母    
def random_verify_code(n=6):
    lt = []
    for i in range(n):
        which=random.randint(1,3) # 随机生成1,2,3
        if which==1:
            lt.append(random_num())
        elif which==2:
            lt.append(random_upper())
        else:
            lt.append(random_lower())
    return ''.join(lt) # 将列表转换为字符串
print(random_verify_code(6))

time模块 是Python中提供的用于处理时间的标准库,可以用来进行时间处理、时间格式化和计时等

函数名称功能描述
time()获取当前时间戳
localtime(sec)获取指定时间戳对应的本地时间的struct time对象
ctime()获取当前时间戳对应的易读字符串
strftime()格式化时间,结果为字符串
strptime()提取字符串的时间,结果为struct time对象
sleep(sec)休眠sec秒
import time
# 获取当前时间戳
t=time.time()
print(t)
# 获取当前时间戳对应的本地时间的struct time对象
lt=time.localtime(t)
print('年:',lt.tm_year)
print('月:',lt.tm_mon)
print('日:',lt.tm_mday)
print('小时:',lt.tm_hour)

datetime模块可以更方便的显示日期并对日期进行运算。

函数名称功能描述
datetime.datetime表示日期时间的类
datetime.timedelta表示时间间隔的类
datetime.date表示目期的类
datetime.time表示时间的类
datetime.tzinfo时区相关的类
import datetime
# 获取当前日期时间
now=datetime.datetime.now()
print(now)  
t1=datetime.datetime(2023,10,2,22,10,43)
diff=now - t1
print(diff.get_days()) # 间隔的天数
print(diff.total_seconds()) # 间隔实际的秒数

cur=now.strftime('%Y年-%m月-%d日 %H:%M:%S') # 格式化日期时间
s1=input('请输入日期时间(格式:2023-10-02 22:10:43):')
t2=datetime.datetime.strptime(s1,'%Y-%m-%d %H:%M:%S') # 提取字符串的时间,结果为struct time对象
print(t2)

pickle模块 是Python中用于序列化和反序列化对象的标准库,可以将Python对象转换为字节流,然后将其保存到文件中,或者从文件中读取字节流,然后将其转换为Python对象。 | 函数名称 | 描述说明| | --- | --- | | dumps(obj) | 把对象(数据)转化为字节,编码过程 | | loads(s) | 把字节转化为数据,解码过程 | | dump(obj,file) | 与dumps()功能相同,把对象序列化成字节存储到文件file中 | | load(file) | 与loads()功能相同,从文件file中字节反序列化成对象数据 | | | |


json模块的常用函数 | 函数名称 | 描述说明| | --- | --- | | json.dumps(obj) | 将Python数据类型转成JSON格式过程,编码过程 | | json.loads(s) | 将JSON格式字符串转成Python数据类型,解码过程 | | json.dump(obj,file) | 与dumps()功能相同,将转换结果存储到文件file中 | | json.load(file) | 与loads()功能相同,从文件file中读入数据 | | | |

import json
# 将Python数据类型转成JSON格式过程,编码过程
d1={"name":"huixiangwuyou","age":18}
s1=json.dumps(d1) # 将字典转换为字符串
print(s1) # {"name":"huixiangwuyou","age":18}
# 将JSON格式字符串转成Python数据类型,解码过程
d2=json.loads(s1) # 将字符串转换为字典
print(d2) # {'name': 'huixiangwuyou', 'age': 18}

hashlib模块 是Python中用于加密的标准库,可以用于生成各种哈希算法的摘要。

import hashlib
# 生成md5摘要
m=hashlib.md5()
m.update('hello'.encode('utf-8')) # 加密
print(m.hexdigest()) # 16进制
# 解决MD5的撞库问题
# 1. 加盐:在密码的前面或者后面添加一些随机的字符串,然后再进行加密
mm=hashlib.md5(d'qweqrerwtqwe34564q65w4e5qw')
mm.update('hello'.encode('utf-8')) # 加密
print(m.hexdigest())
# 生成sha1摘要
s=hashlib.sha1()
s.update('hello'.encode('utf-8')) # 加密
print(s.hexdigest()) # 16进制

shutil模块 是Python中用于文件和目录操作的标准库,可以用于复制、移动、删除、压缩和解压缩文件等操作。

import shutil
# 复制文件
shutil.copy('hello.txt','hello2.txt') # 复制文件
shutil.copyfile('hello.txt','hello2.txt') # 只复制文件信息,不包含文件权限
# 复制目录
shutil.copytree('dir1','dir2') # 复制目录
# 移动文件
shutil.move('hello.txt','dir1') # 移动文件
# 移动目录
shutil.move('dir1','dir2') # 移动目录
# 删除文件
shutil.rmtree('dir1') # 删除目录    

logging模块 是Python中用于记录日志的标准库,可以用于记录程序的运行日志,方便调试和排查问题。

  • level=logging.INFO 日志级别,INFO表示记录信息、警告、错误、严重错误
  • format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' 日志格式
  • asctime 时间,name 模块名,levelname 日志级别,message 日志信息
  • 日志级别:DEBUG、INFO、WARNING、ERROR、CRITICAL
    • 日志级别从低到高,依次为:DEBUG、INFO、WARNING、ERROR、CRITICAL
    • 当设置日志级别为INFO=10时,只会记录INFO、WARNING、ERROR、CRITICAL级别的日志
    • 当设置日志级别为WARNING=30时,只会记录WARNING、ERROR、CRITICAL级别的日志
    • 当设置日志级别为ERROR=40时,只会记录ERROR、CRITICAL级别的日志
    • 当设置日志级别为CRITICAL=50时,只会记录CRITICAL级别的日志
  • filename='example.log' 日志文件的路径和文件名
  • filemode='a' 日志文件的打开模式,a表示追加模式,w表示覆盖模式
  • datefmt='%Y-%m-%d %H:%M:%S' 日志时间的格式
  • formatters 日志格式
  • handlers 日志处理器,用于将日志输出到不同的地方,比如文件、控制台、邮件等
  • loggers 日志记录器,用于记录日志
  • filters 日志过滤器,用于过滤日志
  • 日志处理器的常用函数:
  • addHandler(handler):添加日志处理器
  • removeHandler(handler):移除日志处理器
  • setLevel(level):设置日志级别
  • 日志记录器的常用函数:
  • addHandler(handler):添加日志处理器
import logging
logging.basicConfig(level=30.INFO,format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# 记录日志
logging.info('hello world') # 记录信息
logging.warning('hello world') # 记录警告
logging.error('hello world') # 记录错误
logging.critical('hello world') # 记录严重错误

traceback模块 是Python中用于获取异常信息的标准库,可以用于获取异常信息,方便调试和排查问题。

import traceback
try:
    1/0
except Exception as e:
    print(e) # 输出异常信息
    print(traceback.format_exc()) # 输出异常信息
    # 输出异常信息到文件 或者是logging模块处理
    with open('error.log','a') as fp:
        fp.write(traceback.format_exc())

zipfile模块 是Python中用于压缩和解压缩文件的标准库,可以用于压缩和解压缩文件,方便文件的传输和存储。

import zipfile
# 压缩文件
with zipfile.ZipFile('hello.zip','w') as zf:
    zf.write('a.txt') # 压缩文件
    zf.write('b.txt') # 压缩文件

# 解压文件
f=zipfile.ZipFile('zip_dir/abc.zip',mode='r')
# 直接全部解压
# f.extractall("zip_dir/abcd")
for item in f.namelist():
    f.extract(item,"zip_dir/all")
f.close()

第三方模块

在python中,第三方模块是由社区提供的模块,这些模块可以直接使用,不需要自己编写。 第三方模块的安装卸载和升级方式:

- pip install module_name
- pip install module_name==version
- pip install module_name>=version # 安装指定版本或更高版本的模块
- pip install module_name<=version # 安装指定版本或更低版本的模块
- pip install module_name~=version # 安装指定版本或相近版本的模块
- pip install module_name==version --upgrade # 升级指定版本的模块
- pip install module_name==version --no-cache-dir # 不使用缓存安装指定版本的模块
- pip install module_name==version --user # 安装指定版本的模块到用户目录下
- pip install module_name http://pypi.douban.com/simple --trusted-host pypi.douban.com
- pip `uninstall` module_name # 卸载指定版本的模块
- pip install module_name --upgrade --force-reinstall # 强制升级指定版本的模块
- python -m pip install --upgrade pip # 使用Python升级pip工具

requests模块

requests模块是一个HTTP客户端库,它可以发送HTTP请求并获取响应。 requests模块的常用函数:

  • get(url, params=None, **kwargs):发送GET请求,返回响应对象。
  • post(url, data=None, json=None, **kwargs):发送POST请求,返回响应对象。
  • put(url, data=None, **kwargs):发送PUT请求,返回响应对象。
  • delete(url, **kwargs):发送DELETE请求,返回响应对象。
  • head(url, **kwargs):发送HEAD请求,返回响应对象。
import requests
url="https://blog.huixiangwuyou.com"
url2="https://kodo.huixiangwuyou.com/blog/images/mysql.jpeg"
resp = requests.get(url2)
resp.encoding='utf-8'
# print(resp.text) # 获取 html

print(resp.content) # 若是爬取是图片获取 二进制
with open("load.jpeg","wb") as fp:
    fp.write(resp.content)

openpyxl模块

openpyxl模块是一个用于读写Excel文件的Python库。 openpyxl模块的常用函数:

  • load_workbook(filename):加载Excel文件,返回工作簿对象。
  • Workbook():创建新的工作簿对象。
  • create_workbook():创建新的工作簿对象。
  • save(filename):保存工作簿对象到文件。
  • active:获取活动工作表。
  • create_sheet(title, index):创建新的工作表,title为工作表标题,index为工作表索引。
  • delete_sheet(sheet):删除指定的工作表。
  • sheetnames:获取所有工作表的名称。
  • sheet1 = wb['Sheet1']:获取指定名称的工作表。
  • sheet1 = wb.active:获取活动工作表。
  • cell(row, column, value):获取或设置指定单元格的值。
# 创建新的工作表
from openpyxl import Workbook
cj=[
    ['姓名','语文','数学','英语'],
    ['李世民', '100', '75', '59'],
    ['刘备', '90', '65', '95']
]
wb = Workbook()
sheet = wb.create_sheet('班级学生成绩单')
for item in cj:
    sheet.append(item)
wb.save('abs.xlsx')

from openpyxl import load_workbook
# 打开工作簿
wb = load_workbook('abs.xlsx')
# 获取活动工作表
# sheet = wb['班级学生成绩单']
sheet = wb['Sheet']
# 获取单元格的值
cell_value = sheet['A1'].value
# 设置单元格的值
sheet['A1'] = 'Hello, World!'
# 保存工作簿 不能打开文件,否则报错:PermissionError: [Errno 13] Permission denied: 'abs.xlsx'
wb.save('abs.xlsx')

pdfplumber模块

pdfplumber模块是一个用于解析PDF文件的Python库。 pdfplumber模块的常用函数:

  • open(filename):打开PDF文件,返回PDF对象。
  • pages:获取所有页面。
  • extract_text():提取文本。
  • extract_table():提取表格。
  • extract_images():提取图像。
  • extract_graphics():提取图形。
import pdfplumber
# 打开PDF文件
pdf = pdfplumber.open('abs.pdf')
# 获取所有页面
pages = pdf.pages
# 提取文本
text = pages[0].extract_text()
# 提取图像
images = pages[0].extract_images()
# 提取图形
graphics = pages[0].extract_graphics()
# 关闭PDF文件
pdf.close()

import pdfplumber

with pdfplumber.open('git.pdf') as fp:
    for i in fp.pages:
        print(i.extract_text()) # extract_text()获取内容
        print(f'第---{i.page_number}页')

numpy模块 matplotlib模块

numpy模块是一个用于科学计算的Python库。 numpy模块的常用函数:

  • array():创建数组。
  • zeros():创建全0数组。
  • ones():创建全1数组。
  • full():创建指定值数组。
  • arange():创建等差数列。
  • linspace():创建等间隔数组。
  • random():创建随机数组。
  • reshape():改变数组形状。
  • transpose():转置数组。
  • concatenate():合并数组。
  • split():分割数组。
  • sort():排序数组。
  • searchsorted():查找元素位置。
  • unique():去重数组。
  • where():查找元素位置。
  • sum():求和。
  • mean():求平均值。
  • std():求标准差。
  • var():求方差。
  • max():求最大值。
  • min():求最小值。
  • argmax():求最大值位置。
  • argmin():求最小值位置。
  • dot():矩阵乘法。
  • cross():向量积。
  • outer():外积。
  • matmul():矩阵乘法。
  • vdot():向量点积。
  • inner():向量内积。
  • kron():克罗内克积。

matplotlib 模块是一个用于绘制图表的Python库。 matplotlib模块的常用函数:

  • plot():绘制折线图。
  • bar():绘制柱状图。
  • hist():绘制直方图。
  • scatter():绘制散点图。
  • pie():绘制饼图。
  • boxplot():绘制箱线图。
  • contour():绘制等高线图。
  • contourf():绘制填充等高线图。
  • imshow():绘制图像。
  • savefig():保存图像。
  • show():显示图像。
  • xlabel():设置x轴标签。
  • ylabel():设置y轴标签。
  • title():设置标题。
  • legend():设置图例。
  • grid():设置网格。
  • xlim():设置x轴范围。
  • ylim():设置y轴范围。
  • xticks():设置x轴刻度。
# 将图片变灰
import numpy as np
import matplotlib.pyplot as plt
# 读取图片
n1=plt.imread('load.jpeg')
print(n1)
# 三维数组,最高维度表示图像高,次维度表示图像宽,最低表示图像[R,G,B]颜色
plt.imshow(n1)
# 写一个灰度公式
n2=np.array([0.299,0.597,0.114])

x=np.dot(n1,n2)
# 传入数组显示灰度
plt.imshow(x,cmap='gray')
plt.show()

图片置灰


pandas模块

pandas模块是一个用于数据处理和分析的Python库。 pandas模块的常用函数:

  • DataFrame():创建数据框。
  • read_csv():读取CSV文件。
  • read_excel():读取Excel文件。
  • read_sql():读取SQL数据库。
  • read_html():读取HTML文件。
  • read_json():读取JSON文件。
  • read_pickle():读取Pickle文件。
  • read_hdf():读取HDF文件。
  • read_feather():读取Feather文件。
  • read_parquet():读取Parquet文件。
  • read_gbq():读取BigQuery文件。
  • read_sql_table():读取SQL数据库表。
  • read_sql_query():读取SQL数据库查询结果。
  • read_sql_schema():读取SQL数据库表结构。
  • read_sql_table():读取SQL数据库表。
  • read_sql_query():读取SQL数据库查询结果。
  • read_sql_schema():读取SQL数据库表结构。
import pandas as pd
import matplotlib.pyplot as plt
# 模拟班级成绩数据
data = {
    '姓名': ['张三', '李四', '王五', '赵六', '孙七'],
    '成绩': [85, 90, 78, 92, 88]
}

# 创建 DataFrame
df = pd.DataFrame(data)
# 解决中文乱码问题
plt.rcParams['font.sans-serif']=['SimHei']
# 设置图片清晰度
plt.rcParams['figure.dpi'] = 100

# 绘制柱形图
plt.bar(df['姓名'], df['成绩'])

# 添加标题和标签
plt.title('班级成绩柱形图')
plt.xlabel('姓名')
plt.xticks(rotation=45)
plt.ylabel('成绩')

# 显示图形
plt.show()

班级成绩柱形图


PyEchoCharts模块

PyEcharts是由百度开源的数据可视化库,它对流行图的支持度比较高,它给用户提供了30多种图形,如柱形渐变图K线周期图等 中文帮助文档:https://pyecharts.org/#/zh-cn/


PIL模块

PIL模块是Python Imaging Library的缩写,是Python中用于处理图像的库。

pip install pillow

PIL模块的常用函数:

  • open():打开图像文件。

jieba模块

jieba模块是一个中文分词库,它可以将中文文本切分为词语。 jieba模块的常用函数:

  • cut():分词。

PyInstaller模块

PyInstaller是可以在Windows操作系统中将Python源文件打包成.exe的可执行文件。还可以在Linux和Mac OS操作系统中对源文件进行打包操作。 打包的语法结构为: pyinstaller -F {源文件文件名.py} 注意事项: 在进行文件打包时,需要打包的文件尽量不要有中文,而且需要打包的文件路径也尽量不要有中文,路径中包含中文有可能会导致打包失败 PyInstaller模块的常用函数:

  • freeze():打包。

OS模块

OS模块是Python中用于操作操作系统的标准库。 OS模块的常用函数:

  • getcwd():获取当前工作目录。
  • chdir():改变当前工作目录。
  • listdir():列出指定目录下的所有文件和子目录。
  • mkdir():创建目录。
  • makedirs():创建多级目录。
  • rmdir():删除目录。
  • remove():删除文件。
  • stat():获取文件状态信息。
    • st_size:文件大小。
    • st_mtime:文件修改时间。
    • st_ctime:文件创建时间。
    • st_atime:文件访问时间。
  • rename():重命名文件或目录。
  • system():运行系统命令。
  • path.exists():判断路径是否存在。
  • path.isfile():判断路径是否为文件。
  • path.isdir():判断路径是否为目录。
  • path.join():连接路径。
  • path.split():分割路径。
  • path.splitext():分割路径和扩展名。
  • path.abspath():获取绝对路径。
  • walk():遍历目录树。
  • environ():获取环境变量。
  • getenv():获取环境变量。