2024年超详细的Python3学习路径规划

前言

基于Python3.5+

1.第一阶段基础(必须)

Python3 环境搭建Python3 基础语法Python3 基本数据类型
Python3 数据类型转换Python3 解释器Python3 注释
Python3 运算符Python3 数字(Number)Python3 字符串
Python3 列表Python3 元组Python3 字典
Python3 集合Python3 条件控制Python3 循环语句
Python3 推导式Python3 迭代器与生成器Python3 函数
Python3 lambdaPython3 模块Python3 输入和输出
Python3 错误和异常Python3 面向对象

2.第二阶段基础

Python3 pip (必须)

pip 是 Python 包管理工具,该工具提供了对 Python 包的查找、下载、安装、卸载的功>能。

Python3 正则表达式Python3 enum(枚举)Python3 MySQL(PyMySQL) (必须)
Python3 requests 模块Python3 函数式注解Python3 多线程 (必须)
Python3 XML 解析Python3 JSON (必须)Python pyecharts模块

关于 pyecharts模块

ECharts 是由百度开发的一款强大的开源数据可视化库,而 Pyecharts 则是 ECharts 的 Python 封装,使得在 Python 中使用 ECharts 变得更加方便。

3.Web开发基础

推荐使用 Djiango Rest Framework框架进行web-api开发
1.Django Rest Framework(DRF)框架搭建步骤
2.django-rest-framework官网

4.推荐了解的库,根据你的需要来

内置库:

通用库

  • time— 时间访问和转换
  • datetime— 基本日期和时间类型
  • calendar— 常规日历相关功能
  • collections— 容器数据类型
  • bisect— 数组二分算法
  • array— 高效的数值数组
  • weakref— 弱引用
  • types— 动态类型创建和内置类型的名称
  • copy— 浅拷贝和深拷贝操作
  • pprint— 数据漂亮的打印机

结构化标记处理工具:

  • html— 超文本标记语言支持
  • html.parser— 简单的 HTML 和 XHTML 解析器
  • html.entities— HTML 通用实体的定义
  • XML 处理模块
  • xml.etree.ElementTree — ElementTreeXML API
  • xml.dom— 文档对象模型 API
  • xml.dom.minidom— 最小的 DOM 实现
  • xml.dom.pulldom— 支持构建部分 DOM 树
  • xml.sax— 支持 SAX2 解析器
  • xml.sax.handler— SAX 处理程序的基类
  • xml.sax.saxutils— SAX 实用程序
  • xml.sax.xmlreader— XML 解析器的接口
  • xml.parsers.expat — 使用 Expat进行快速 XML 解析

数据压缩和归档:

  • gzip— 支持gzip文件
  • zipfile— 处理 ZIP 存档
  • tarfile— 读取和写入 tar 归档文件

加密服务:

  • hashlib— 安全哈希和消息摘要
  • hmac— 用于消息身份验证的密钥哈希
  • secrets— 生成用于管理密钥的安全随机数

并发执行:

  • threading— 基于线程的并行性
  • multiprocessing— 基于进程的并行性
  • multiprocessing.shared_memory— 提供共享内存,以便跨进程直接访问
  • 并发包
  • concurrent.futures— 启动并行任务
  • queue— 同步的队列类

网络和进程间通信:

  • asynchronous— 异步 I/O
  • socket— 低级网络接口
  • ssl— 套接字对象的 TLS/SSL 包装器
  • select— 等待 I/O 完成
  • 选择器— 高级 I/O 多路复用

第三方库:

进度条

1.tqdm

安装
pip install tqdm

#!/usr/bin/python3
# -*- coding: utf-8 -*-
from tqdm import tqdm
import timedef tqdm_process_do(items):pbar = tqdm(items)for char in pbar:time.sleep(0.25)#pbar.set_description("当前进度")#pbar.update(21)if __name__ == "__main__":tqdm_process_do(range(100))

2.rich.progress

安装
pip install rich

#!/usr/bin/python3
# -*- coding: utf-8 -*-
import time
from rich.progress import track, Progress
# 基础用法
def rich_progress_base_do(items):for i in track(items, description="Processing..."):time.sleep(0.1)  # Simulate work being done# 高级用法  以下演示的是三个任务:下载 (Processing)加工 烹饪
def rich_advice_progress_do():with Progress() as progress:task1 = progress.add_task("[red]Downloading...", total=100)task2 = progress.add_task("[green]Processing...", total=100)## 如果想隐藏任务 可以设置visible为Falsetask3 = progress.add_task("[cyan]Cooking...", total=100, visible=False)while not progress.finished:progress.update(task1, advance=5)progress.update(task2, advance=4)progress.update(task3, advance=3)time.sleep(0.1)def do_work(task):print("回调处理此任务-----------")# 迅时进度  这个不会在控制台展示
def rich_progress_transient_do():with Progress(transient=True) as progress:task = progress.add_task("Working", total=100)do_work(task)# 打印/日志
# progress.console
def rich_progress_console_do(items,processTiltle="当前进度",rowJobDesc="当前处理项:"):with Progress() as progress:task = progress.add_task(processTiltle, total=len(items))for job in items:progress.console.print(f"{rowJobDesc} #{job}")run_job(job)progress.advance(task)def run_job(job):passif __name__ == "__main__":print("-----------基础用法-------------")rich_progress_base_do(range(50))print("-----------高级用法-------------")rich_advice_progress_do()print("-----------迅时用法-------------")rich_progress_transient_do()print("-----------打印/日志用法-------------")rich_progress_console_do(range(50))#如果不确定的进度
#当您添加任务时,它会自动启动,
#1.先调用 add_task() 设置=》 start=False  total=None
#2.当你有步骤数时,你可以调用 start_task()
#3.然后像往常一样 update()
from time import sleep
from urllib.request import urlopenfrom rich.progress import wrap_fileresponse = urlopen("https://www.textualize.io")
size = int(response.headers["Content-Length"])with wrap_file(response, size) as file:for line in file:print(line.decode("utf-8"), end="")sleep(0.1)
import os.path
import sys
from concurrent.futures import ThreadPoolExecutor
import signal
from functools import partial
from threading import Event
from typing import Iterable
from urllib.request import urlopenfrom rich.progress import (BarColumn,DownloadColumn,Progress,TaskID,TextColumn,TimeRemainingColumn,TransferSpeedColumn,
)progress = Progress(TextColumn("[bold blue]{task.fields[filename]}", justify="right"),BarColumn(bar_width=None),"[progress.percentage]{task.percentage:>3.1f}%","•",DownloadColumn(),"•",TransferSpeedColumn(),"•",TimeRemainingColumn(),
)done_event = Event()def handle_sigint(signum, frame):done_event.set()signal.signal(signal.SIGINT, handle_sigint)def copy_url(task_id: TaskID, url: str, path: str) -> None:"""Copy data from a url to a local file."""progress.console.log(f"Requesting {url}")response = urlopen(url)# This will break if the response doesn't contain content lengthprogress.update(task_id, total=int(response.info()["Content-length"]))with open(path, "wb") as dest_file:progress.start_task(task_id)for data in iter(partial(response.read, 32768), b""):dest_file.write(data)progress.update(task_id, advance=len(data))if done_event.is_set():returnprogress.console.log(f"Downloaded {path}")def download(urls: Iterable[str], dest_dir: str):"""Download multiple files to the given directory."""with progress:with ThreadPoolExecutor(max_workers=4) as pool:for url in urls:filename = url.split("/")[-1]dest_path = os.path.join(dest_dir, filename)task_id = progress.add_task("download", filename=filename, start=False)pool.submit(copy_url, task_id, url, dest_path)if __name__ == "__main__":# Try with https://releases.ubuntu.com/20.04/ubuntu-20.04.3-desktop-amd64.isoif sys.argv[1:]:download(sys.argv[1:], "./")else:print("Usage:\n\tpython downloader.py URL1 URL2 URL3 (etc)")

3.alive-progress

安装
pip install alive-progress

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# 导入 alive-progress 库
from alive_progress import alive_bar
import timedef alive_process_do(items):with alive_bar(len(items), force_tty=True) as bar:for item in items:# process itembar()  # 推进进度条time.sleep(0.1)if __name__ == "__main__":alive_process_do(range(100))

需要注意的是 alive-progress 并不像 tqdm 等进度条库一样会自动更新,只有我们程序调用了 bar 才会让进度条 +1.

Q&A
解决Pycharm不显示进度条

处理excel:

1.openpyxl的

用于读取和写入 Excel 2010 文件的推荐包(即:xlsx/xlsm/xltx/xltm )
官方文档: https://openpyxl.readthedocs.io/en/stable/

from openpyxl import load_workbook, Workbook
from day01.calTime import CalTime# 50万数据-(50w行-10列) 大概需要90s 
#如果是10万+数据需要写入 可以使用xlsxwriter来代替
# 如果是.xls可以使用 xlread来进行读取##'get_index', 'get_sheet_by_name', 'get_sheet_names','worksheets','sheetnames'
##, 'remove', 'remove_sheet', 'save', , 'style_names', 'template'
# , 'read_only' 'write_only'
wb = load_workbook(filename='data/infile-3k.xlsx', read_only=True)
sheetnames = wb.get_sheet_names()  # wb.sheetnames
worksheet1 = wb.get_sheet_by_name("Sheet1")  # wb["Sheet1"]
sheets_count = len(sheetnames)  # sheets_count =len(wb.worksheets)
index1 = wb.get_index(worksheet1)for sn in sheetnames:ws = wb.get_sheet_by_name(sn)for row in ws.rows:for cell in row:print(cell.value)# for ws in wb.worksheets:
#     print(ws.title)
#     for row in ws.rows:
#         for cell in row:
#             print(cell.value)# 与普通工作簿不同,只读工作簿将使用延迟加载。 
#必须使用该方法显式关闭工作簿
wb.close()

2.xlsxwriter

用于写入数据、格式化信息,特别是 Excel 2010 格式(即:.xlsx)图表的替代包
只能写,大量数据时推荐使用

图表:

1.pyecharts

pyecharts 是一个基于 ECharts 的 Python 数据可视化库,它允许用户使用 Python 语言生成各种类型的交互式图表和数据可视化。(ECharts 是由百度开发的一款强大的开源数据可视化库)
pyecharts 特点与功能:

  • 简单易用: Pyecharts 提供了直观而友好的 API,使得用户能够快速上手,轻松生成各种图表。
  • 丰富的图表类型: 支持多种常见的图表类型,包括线图、柱状图、散点图、饼图、地图等,满足不同场景的需求。
  • 支持主流数据格式: 能够处理常见的数据格式,如列表、字典、Pandas DataFrame 等。
  • 交互性: 生成的图表可以具有交互性,用户可以通过鼠标悬停、缩放等方式与图表进行互动。
  • 丰富的配置选项: 提供了丰富的配置选项,允许用户自定义图表的样式、布局等属性。
  • 支持主题: 提供多种主题,用户可以根据需要选择合适的主题,使图表更符合应用的整体风格。
数据处理:

1.pandas

#!/usr/bin/python3
# -*- coding: utf-8 -*-
import pandas as pd
import pprint
#读取和写入 支持格式 .csv .xls .html .hdf5 .json .GBQ .Sql /Parquet
from day01.calTime import CalTime#查看 pandas DataFrame 的前 8 行。
#ld = df.head(8)
#print(ld)#查看 pandas DataFrame 的最后 8 行。
#ld = df.tail(8)
#print(ld)# int64  float64 object
##将数据转化成 excel
#df.to_excel("titanic.xlsx", sheet_name="passengers", index=False,header=True)#查看DataFrame
#print(df.info())#Series 中的数据是有序的。
#可以将 Series 视为带有索引的一维数组。 可以是list/tuple/dict
#索引可以是唯一的,但不是必须的。 如果是list tuple 则索引个数需要与数据个数一致 dict则没那么多要求
#数据可以是标量、列表、NumPy 数组等。###我想存储泰坦尼克号的乘客数据。对于许多乘客,我知道姓名(字符)、年龄(整数)和性别(男性/女性)数据。df = pd.DataFrame({"Name": ["Braund, Mr. Owen Harris","Allen, Mr. William Henry","Bonnell, Miss. Elizabeth",],"Age": [22, 35, 58],"Sex": ["male", "male", "female"],}
)#df.to_excel("ttnkh.xlsx")
#我只想看age部分
## way-1
# age_part =df["Age"]## way-2 (重新加载series 列名为Age)
# age_part = pd.Series([22, 35, 58], name="Age")
# pprint.pprint(age_part)#我想知道乘客的最大年龄
#print(df["Age"].max())
#print(pd.Series([22, 35, 58], name="Age").max())#我对数据表的数值数据的一些基本统计感兴趣
## 平均值(mean) 总数(count) 最小(min) /大(max)值 各个年龄度占比
#print(df.describe())# df = pd.read_excel('data/infile-500k.xlsx')
## for col in df.columns:
##     series = df[col]
# df.to_csv("data/500k-data.csv")
calTime = CalTime()
titanic = pd.read_csv("data/500k-data.csv")
datas = titanic.head(1)for ind,row in datas.iterrows():print(ind,row)calTime.print_and_write()
#方法和属性 方便第一次检查。head tail info dtypes

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/603549.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

dnSpy调试工具二次开发1-新增菜单

测试环境: window 10 visual studio 2019 版本号:16.11.15 .net framework 4.8 开发者工具包 下载 .NET Framework 4.8 | 免费官方下载 .net 5开发者工具包 下载 .NET 5.0 (Linux、macOS 和 Windows) 利用git拉取代码(源码地址:Gi…

启动IDEA报错,web servcer failed to start.port 8080 was already in use.

启动IDEA报错,web servcer failed to start.port 8080 was already in use. 问题现状 启动IDEA失败,端口被占用。 解决办法: 使用netstat -ano指令,查看端口占用情况 因为我是win11的系统,使用指令时出现如下提示。…

【IC设计】移位寄存器

目录 理论讲解背景介绍什么是移位寄存器按工作模式分类verilog语法注意事项 设计实例循环移位寄存器算术双向移位寄存器5位线性反馈移位寄存器伪随机码发生器3位线性反馈移位寄存器32位线性反馈移位寄存器串行移位寄存器(打4拍)双向移位寄存器&#xff1…

c语言题目之统计二级制数中1的个数

文章目录 题目一、方法1二、方法2三,方法3总结 题目 统计二进制数中1的个数 输入一行,输出一行 输入: 输入一个整数 输出: 输出存储在内存中二进制的1的个数 一、方法1 之前的文章中,小编写了有关于内存在二进制中的存…

Fiddler工具 — 8.会话列表(Session List)

1、会话列表说明 Fiddler抓取到的每条HTTP请求(每一条称为一个session)。 主要包含了请求的ID编号、状态码、协议、主机名、URL、内容类型、body大小、进程信息、自定义备注等信息。如下图: 说明: 名称含义#抓取HTTP Request的顺…

Ribbon相关问题及答案(2024)

1、Ribbon是什么,它在微服务架构中扮演什么角色? Ribbon是一个客户端负载均衡器,它在微服务架构中扮演着关键性的角色。Ribbon的设计理念是在客户端进行服务发现和负载均衡,这种方式不同于传统的通过中心化的负载均衡器&#xff…

YHZ018 Python 运算符优先级

资源编号:YHZ018 配套视频:https://www.bilibili.com/video/BV1zy4y1Z7nk?p19 YHZ018:运算符优先级 🪿 运算符优先级 Python支持多种运算符,下表按照优先级从高到低的顺序列出了所有运算符。运算符的优先级决定了在表…

面试算法90:环形房屋偷盗

题目 一条环形街道上有若干房屋。输入一个数组表示该条街道上的房屋内财产的数量。如果这条街道上相邻的两幢房屋被盗就会自动触发报警系统。请计算小偷在这条街道上最多能偷取的财产的数量。例如,街道上5家的财产用数组[2,3,4,5…

js实现全选按钮,反选

点击全选按钮&#xff0c;下面的按钮全部选中&#xff1b;再次点击&#xff0c;全部取消选择。 点击下面的按钮时&#xff0c;检查下面的按钮是不是全部都选中&#xff0c;如果全部选中了&#xff0c;需要修改全选按钮的选中状态为ture。 全选反选 <!DOCTYPE html> <…

Linux系统IO—探索输入输出操作的奥秘

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;HEART BEAT—YOASOBI 2:20━━━━━━️&#x1f49f;──────── 5:35 &#x1f504; ◀️ ⏸ ▶️ ☰ …

c++之迭代器

目录 一、迭代器 二、几种常见的迭代器类型 三、使用迭代器时注意事项 一、迭代器 在C中&#xff0c;迭代器是一种用于遍历容器元素的对象。迭代器提供了一种通用的方式来访问各种不同类型的容器&#xff0c;如数组、向量、列表、集合和映射等。 使用迭代器可以避免直接操作…

三、Qt核心与Qt类库

一、Qt核心&#xff1a;元对象系统 1、Qt核心特点 Qt对标准C进行了扩展&#xff0c;引入了一些新的概念和功能元对象编译器&#xff08;MOC&#xff09;是一个预处理器&#xff0c;先将Qt的特性程序转为标准C程序&#xff0c;再由标准C编译器进行编译Qt为C语言增加的特性在Qt…

提升开发效率:npm包管理器的使用技巧

文章目录 一、npm简介二、npm的基本操作1. 安装Node.js和npm2. 创建和管理项目3. 安装依赖4. 卸载依赖5. 更新依赖 三、npm的高级特性1. 使用不同版本的依赖项2. 查看已安装的依赖项和它们的版本信息3. 运行脚本命令 《Node.js从入门到精通&#xff08;软件开发视频大讲堂&…

09-生成器模式(Builder)模式

意图 将一个复杂对象的构建与它的表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。 理解 如果构建一个对象的的过程会比较复杂&#xff0c;或者说在写代码的过程中&#xff0c;需要比较频繁地构建某个对象&#xff0c;那么可以针对这个对象写一个专门用于构建这…

2024前端炫酷源码分享(附效果图及在线演示)

分享10款非常有趣的前端特效源码 其中包含css动画特效、js原生特效、svg特效以及小游戏等 下面我会给出特效样式图或演示效果图 但你也可以点击在线预览查看源码的最终展示效果及下载源码资源 GSAP-火箭动画特效 GSAP 火箭动画 当氮气充足的情况下 火箭会冲出 并继续飞行 图片…

C#,字符串匹配算法(模式搜索)Z算法的源代码与数据可视化

Z算法也是模式搜索&#xff08;Pattern Search Algorithm&#xff09;的常用算法。 本文代码的运算效果&#xff1a; 一、Z 算法 线性时间模式搜索算法的Z算法&#xff0c;在线性时间内查找文本中模式的所有出现。 假设文本长度为 n&#xff0c;模式长度为 m&#xff0c;那么…

【Spring Cloud 】进阶之Config配置中心

目录 config大致的一个思路&#xff1a; 二&#xff0c;前期准备 2.1导入依赖 2.2编写bootstrop.yml&#xff1a; 三&#xff0c;编写Controller类 3.1获取单个配置类信息 3.2获取多个配置类信息 &#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f3…

Linux习题6

解析&#xff1a;排序必须得是rwx,所以B不对 解析&#xff1a; /etc/resolv.conf&#xff1a;是DNS配置文件。在网卡配置文件中进行配置&#xff0c;默认情况下&#xff0c;网卡配置文件DNS优于/etc/resolv.conf。 /etc/hostname&#xff1a;在centos7&#xff0c;配置主机名…

Linux时间同步和时间设置

时间分为&#xff1a; 1、hwclock&#xff1a;用于查看硬件时间 hwclock -r&#xff08;--show&#xff1a;读取硬件时钟并打印结果&#xff09; &#xff1a;查看硬件时间 hwclock -s &#xff1a;系统时间向硬件时间同步 hwclock -w &#xff1a;硬件时间向系统时间同步 …

我的第一个前端项目,vue项目从零开始创建和运行

​入门前端&#xff0c;从基础做起&#xff0c;从零开始新建项目 背景&#xff1a;VUE脚手架项目是一个“单页面”应用&#xff0c;即整个项目中只有1个网页&#xff01; 在VUE脚手架项目中&#xff0c;主要是设计各个“视图组件”&#xff0c;它们都是整个网页中某个部分&…