简介这份资源汇集了一百个Python源码实例定位于软件与插件开发的实战练习面向想在实战中提升编码能力的初学者与进阶开发者覆盖从基础语法练习到Web前端、数据交换等常见场景。压缩包共包含两千零三个文件其中Python源码多达一千七百五十一个是绝对主体另有文本说明、HTML页面、JavaScript脚本、XML配置、CSS样式以及JSON数据等类型可配合源码呈现完整示例或用于静态页面、配置数据等场景。整个资源包约七十四点二九MB体量适中便于下载后分类检索与逐例演练。内容预览显示其中包含常见的前端样式库和日期组件相关文件说明部分实例还涉及页面样式与日期组件的实际运用已有两千七百五十二人学习下载实用性得到初步验证。通过逐一拆解这些源码读者既能模仿常见的代码组织方式与函数写法也能根据需要修改参数并观察运行结果适合作为日常练习、课程作业参考和小项目起步的素材库。1. 这套 Python 源码合集的价值与其重复造轮子不如直接抄作业从零写一个爬虫要多久如果只是抓某个资讯站几百条标题认真写大约一小时但如果你要的是一个能直接跑、能改参数、带异常处理的完整脚本从零开始保底一下午。这套「python100个源码实例」解决的就是这种“明知道能实现但不想每次重造轮子”的处境。它把开发里高频出现的小需求做成了 100 个可运行的 Python 脚本覆盖网络采集、数据处理、Web 接口、桌面工具、自动化办公和趣味算法。刚学完语法的人可以拿它对照练手被具体需求卡住的人可以抄模板改参数想拓展技能树的开发者也能当工具字典用。整批资源按难度和场景分了八个目录每个实例都带说明文档解压之后就能跑不用再做二次整理。2. 资源拆解100 个实例是怎么分类和组织的2.1 目录结构从 00 到 07 的八级递进这批源码实例按「由易到难、按场景分组」的思路组织拿到手先看目录别急着逐个点开。整理过的目录大概长这样python100个源码实例/ ├── 00_入门基础/ # 10 个变量、循环、函数、文件读写 ├── 01_网络爬虫/ # 14 个静态页面、翻页、CSV 落盘 ├── 02_数据处理与可视化/ # 14 个Excel 合并、去重、matplotlib 绘图 ├── 03_Web开发/ # 12 个Flask 接口、SQLite 增删改查、简易管理后台 ├── 04_自动化办公/ # 12 个Word 改名、PDF 合并、Excel 批量拆分 ├── 05_GUI桌面应用/ # 12 个Tkinter 记事本、计算器、记账本 ├── 06_趣味算法与游戏/ # 14 个八皇后、贪吃蛇、冒泡排序可视化 └── 07_综合实战项目/ # 12 个爬虫Web数据可视化的串联小项目每个目录下的实例数量不完全一样合起来正好 100 个。划分逻辑很清楚入门基础负责把语法过一遍网络爬虫和处理数据是日常工作最常用到的两块Web 开发和 GUI 桌面应用对应两类主流交付形式最后的综合实战项目把前面几种能力串起来。如果你不是新手直接从01_网络爬虫、02_数据处理与可视化、03_Web开发这三个目录里找素材就够了。我一般拿到源码包第一步不是看代码而是先读目录。这套分类至少有两点做得比较省心一是难度递进和场景分组是分开的新手可以按目录顺序刷老手可以按场景跳着找二是每个实例文件夹的名称基本就是功能描述比如excel_merge、flask_book_api想找什么直接看目录名就能定位。2.2 单个实例的文档约定README 里有什么每一个实例文件夹内部的布局是统一的这是这套资源比较值得表扬的地方excel_merge/ ├── source.py # 主脚本可直接运行 ├── README_说明.md # 功能、参数、依赖说明 ├── requirements.txt # 该实例需要的第三方库 └── sample_data/ # 示例输入文件跑之前不用准备数据README 通常是三四页的 Markdown不会贴大段原理重点写三件事这个脚本接收什么输入、输出什么结果、哪些参数需要按需求改。以excel_merge为例文档里会列明输入目录路径、输出文件路径、是否保留表头、遇到空白单元格怎么处理。这类说明对二次开发非常关键——后面改造时基本只要对着参数表动手。另外每个实例的requirements.txt只列它自己需要的库而不是一次性列全 100 个实例的依赖。这样做的实际好处是跑哪个实例就装哪个依赖不把环境搞成一锅粥。偏好是好事但如果有的实例缺 requirements手动补一个也不难。2.3 快速定位按场景而不是按编号找实例面对 100 个实例最容易犯的错就是从头挨个读。我建议按需求倒着找先问自己现在缺什么工具再去对应目录里翻。比如你要批量合并几十个 Excel直接进02_数据处理与可视化找excel_merge要给内部工具加一个本地操作界面去05_GUI桌面应用翻记账本改改就成了。你手头的需求优先翻哪个目录典型实例抓取公开网页标题、翻页采集01_网络爬虫资讯站标题采集器合并 Excel、清洗脏数据、出图表02_数据处理与可视化多工作簿合并脚本给内部数据加 HTTP 接口03_Web开发Flask 图书增删改查 API批量重命名文件、PDF 合并04_自动化办公文件夹批量改名工具本地小工具、不想部署 Web05_GUI桌面应用Tkinter 记账本练习逻辑和算法思维06_趣味算法与游戏贪吃蛇小游戏这个表格对应的挑选逻辑我后面第 6 章还会展开讲核心就是「先定场景再选实例最后只改参数」。这套资源里真正需要你从头写代码的实例不超过 10%剩下的是改改路径、换换文件就完事。3. 环境与跑通从解压到第一个脚本出结果3.1 环境准备虚拟环境与依赖安装拿到源码包后第一步是确认 Python 版本。这套资源里的实例大多基于 Python 3.8 到 3.10 写的建议直接装 3.10 或更新的稳定版避免老接口被弃用。我不建议把依赖直接装进系统 Python因为实例多、依赖杂稍不注意就把环境搞乱了。一个更稳妥的做法是给整个合集建一个虚拟环境# 在源码包根目录下执行 python -m venv venv # Windows 激活 venv\Scripts\activate # mac / Linux 激活 source venv/bin/activate # 回到源码包根目录批量安装公共基础依赖 pip install -r requirements_base.txt这里requirements_base.txt是我在整理时自己补的一份聚合依赖包含了 requests、beautifulsoup4、pandas、flask 这些高频库。如果你下载的包里没有这个文件就逐个实例按需安装比如跑爬虫就装requests和beautifulsoup4跑数据处理就装pandas和openpyxl。注意虚拟环境的 Python 版本和系统原有 Python 版本最好保持一致否则切换目录后容易出现解释器不匹配的玄学问题。激活之后验证环境没有装错直接跑一个最简单的入门脚本比如00_入门基础里的print_args.pypython 00_入门基础/print_args.py --name test如果命令行正常输出结果说明环境没问题可以进入下一步。3.2 运行第一个实例看 README 再动手我不建议一上来挑最难的跑。先找一个结构最简单的实例建立信心我通常推荐05_GUI桌面应用里的简易记事本或者00_入门基础里的输入输出练习因为它们几乎没有外部输入双击就能看到效果。以记事本为例cd 05_GUI桌面应用/tkinter_notepad python source.py运行后屏幕会弹出一个 Tkinter 窗口自带菜单栏和文本框可以直接打开文件、保存文件。这个实例适合做首次运行验证因为它能直观地告诉你「代码跑通了」这件事不需要看命令行输出猜。记事本跑起来之后再去跑需要参数的实例。这时就体现出 README 的价值了——打开README_说明.md找到「运行方式」一节里面通常有类似这样的说明python source.py --input_dir ./sample_data --output_file result.csv--input_dir指定输入文件所在目录--output_file指定结果输出路径。大多数实例的路径参数都支持绝对路径和相对路径但要注意相对路径是相对于你当前所在的终端目录不是相对于source.py所在的目录。这个细节我第一次跑的时候踩过坑后面避坑章节专门说。3.3 三类最常用的运行方式直接跑、带参数跑、当模块调用刚开始接触这 100 个实例建议先把三种运行方式分清楚。第一种是直接运行python source.py适合 GUI 程序和无参数脚本。第二种是带参数运行python source.py --port 8080适合爬虫、Web 接口这类需要配置输入的脚本。第三种是当成模块导入from source import fetch_titles这种适合二次开发时复用里面封装好的函数。我见过不少朋友把第三种和第一种混为一谈在脚本里写import source然后报错找不到模块。原因很简单source.py没有加包的__init__.py或者当前目录没进 Python 路径。正确的做法是先在终端里cd到实例所在目录再启动 Python或者把实例目录加到sys.path里。这套资源大部分脚本尾部都带了if __name__ __main__判断所以用第三种方式导入时不会触发执行这个设计对改造很友好第 6 章会专门用它展开。4. 核心模块拆解爬虫、数据处理、Web 接口三块硬货4.1 网络爬虫实例一个带翻页和重试的资讯采集器01_网络爬虫目录里的资讯标题采集器是我认为整套资源里必读的实例之一。它不依赖 Selenium只用了requests加BeautifulSoup属于轻量级静态页面采集结构清晰适合改造成各种定制采集任务。核心代码我简化如下# -*- coding: utf-8 -*- 资讯站点标题采集器支持翻页、关键词过滤、CSV 落盘 import time import csv import requests from bs4 import BeautifulSoup def fetch_titles(base_url, page_param, keyword, start1, end5): base_url: 不带翻页参数的 URL page_param: 翻页参数的名称比如 page keyword: 标题过滤关键词空字符串表示不过滤 start / end: 抓取起始页和结束页 results [] headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) } for page in range(start, end 1): url f{base_url}?{page_param}{page} try: resp requests.get(url, headersheaders, timeout10) resp.raise_for_status() resp.encoding resp.apparent_encoding except requests.RequestException: continue # 单页失败跳过不中断整个任务 soup BeautifulSoup(resp.text, html.parser) for h3 in soup.select(h3 a): title h3.get_text(stripTrue) if keyword and keyword not in title: continue results.append({ page: page, title: title, url: h3.get(href), }) time.sleep(1) # 拉大请求间隔避免打得太快 # 结果写入 CSV with open(news_titles.csv, w, newline, encodingutf-8-sig) as f: writer csv.DictWriter(f, fieldnames[page, title, url]) writer.writeheader() writer.writerows(results) return results if __name__ __main__: fetch_titles(https://example-news-site.com/list, page, Python, 1, 3)逻辑上这段代码分四步拼 URL、发请求拿 HTML、用 CSS 选择器提取标题、最后写进 CSV。值得注意的细节有两个一是resp.encoding resp.apparent_encoding这能解决大部分中文乱码问题不依赖服务端声明的编码二是time.sleep(1)给每个请求之间加间隔避免采集频率过高被服务端拒绝。参数方面base_url和page_param是翻页机制的两个核心变量改它们就能适配不同站点的分页规则。keyword参数做标题过滤比如只保留含指定关键词的条目适合聚焦某个领域的信息抓取。start和end控制抓取范围调试时先跑 1 到 2 页验证结构再扩大范围。这套写法换汤不换药改成抓图片链接、抓商品价格都是同样的套路。4.2 数据处理实例多工作簿合并成一个 Excel实际工作中最常遇到的需求是「把一堆结构相同的 Excel 表合并成一张总表」。02_数据处理与可视化里的excel_merge实例用 pandas 加 glob 十几行就解决了。代码摘出来是这样的# -*- coding: utf-8 -*- Excel 批量合并读取指定目录下所有 xlsx纵向拼接后输出 import glob import pandas as pd def merge_excels(input_dir, output_path, sheet_name0): input_dir: 存放待合并 xlsx 的目录 output_path: 合并结果的保存路径如 ./merged.xlsx sheet_name: 读取哪个工作表默认第一个 frames [] for file_path in glob.glob(f{input_dir}/*.xlsx): # 逐文件读取遇到空表直接跳过不中断 try: frame pd.read_excel(file_path, sheet_namesheet_name) frames.append(frame) except ValueError: continue if not frames: raise RuntimeError(指定目录下没有可合并的 Excel 文件) result pd.concat(frames, ignore_indexTrue) # 检查是否有重名文件有则覆盖 result.to_excel(output_path, indexFalse) return result if __name__ __main__: merge_excels(./sample_data, ./merged_result.xlsx)这段代码的核心是glob匹配文件加pd.concat纵向拼接。glob.glob(f{input_dir}/*.xlsx)会列出目录下所有 xlsx 文件pd.read_excel读每个文件最后用concat(ignore_indexTrue)把 DataFrame 列表拼成一张大表。ignore_indexTrue很关键它会让合并后的行号重新从 0 开始排否则保留原索引结果表里会出现一堆重复的数字。sheet_name参数支持传工作表名或序号默认取第一个工作表。如果目录里混入了 Excel 打开后残留的临时文件read_excel会抛异常这里用try...except ValueError跳过保证一个脏文件不会毁掉整个合并任务。输出端有一个细节to_excel时显式把index设为False这是为了避免把 DataFrame 默认的行号写进结果表否则你会看到多出一列没意义的数字。4.3 Web 接口实例Flask 加 SQLite 的增删改查 API03_Web开发里有一个非常实用的实例用 Flask 写一个图书管理的 REST 风格接口数据存在 SQLite 里适合做内网小工具的后端。它不依赖任何 ORM用的都是 Python 标准库sqlite3读起来零负担。核心代码# -*- coding: utf-8 -*- Flask 图书管理 APIGET/POST/DELETE 三个路由数据存 SQLite import sqlite3 from flask import Flask, request, jsonify app Flask(__name__) DB_PATH ./books.db def init_db(): 建表id 自增name 书名author 作者 with sqlite3.connect(DB_PATH) as conn: conn.execute( CREATE TABLE IF NOT EXISTS book (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, author TEXT) ) init_db() app.route(/book, methods[POST]) def add_book(): 新增图书请求体 JSON 格式如 {name: Python实战, author: 某作者} data request.get_json(forceTrue) with sqlite3.connect(DB_PATH) as conn: cur conn.execute( INSERT INTO book(name, author) VALUES(?, ?), (data[name], data.get(author, )), ) conn.commit() return jsonify({id: cur.lastrowid}), 201 app.route(/book/int:book_id, methods[GET]) def get_book(book_id): 按 id 查图书不存在则返回 404 with sqlite3.connect(DB_PATH) as conn: row conn.execute( SELECT id, name, author FROM book WHERE id ?, (book_id,), ).fetchone() if row is None: return jsonify({error: not found}), 404 return jsonify({id: row[0], name: row[1], author: row[2]}) if __name__ __main__: app.run(host127.0.0.1, port5000, debugTrue)这个实例的价值在数据库访问模式上每次请求都创建一个新连接、用完即关配合with上下文确保提交或回滚不会有连接泄漏问题。?占位符传参是防 SQL 注入的标准写法新手容易直接拼接字符串这里用参数化查询是很好的示范。路由设计值得拎出来说POST /book负责新增GET /book/int:book_id负责查询int:book_id是 Flask 的转换器只接受整数路径参数省去了手写类型转换。返回的 JSON 结构统一是{id: ..., name: ..., author: ...}或{error: ...}前端对接时不用猜字段名。启动参数里host默认127.0.0.1只允许本机访问如果部署到局域网需要改成0.0.0.0这一点避坑章会再说。5. 避坑记录这批实例最常见的五个翻车现场5.1 爬虫一跑就被拦返回 403 或空列表现象资讯采集器脚本运行时没有报错但 CSV 文件是空的或者resp.status_code输出 403。原因绝大多数网站会检查请求头默认的Python-urllib/3.x标识一眼就被识别成程序服务端直接拒绝。解决这实例里已经带了User-Agent请求头但如果你自己改造时把 headers 去掉了或者目标站点做了更严格的反爬就需要补充Referer、Accept-Language并调大请求间隔。改法是在fetch_titles的 headers 字典里加字段同时把time.sleep(1)调到 2 到 3 秒。如果加完还是 403先别急着上 Selenium打开浏览器无痕模式访问目标页面看是不是需要登录或验证很多站点并不是真的封爬虫而是只对陌生 UA 拦截。5.2 网页标题抓下来了但写到 CSV 里全是乱码现象终端打印标题正常用 Excel 打开news_titles.csv全是乱码。原因写入 CSV 时用了全英文环境常见的encodingutf-8但 Excel 默认用 GBK 解析 CSV两侧编码对不上。解决实例代码里已经写了encodingutf-8-sig这个带 BOM 的编码格式会被 Excel 正确识别。如果你自己新建爬虫脚本记住这个写法不要用utf-8。另外读取 CSV 时如果发现中文乱码pd.read_csv(file_path, encodinggbk)通常能救回来——这个坑在数据处理实例里同样适用。5.3 Tkinter 界面字体发虚或者中文显示成方块现象记事本窗口标题和按钮上的中文全部显示成小方块或者字体大小在 Windows 高分屏下模糊不清。原因Tkinter 默认字体在中文 Windows 下不是中文字体且 DPI 缩放没有适配。解决在创建窗口前手动设置全局字体import tkinter as tk from tkinter import font root tk.Tk() default_font font.nametofont(TkDefaultFont) default_font.configure(familyMicrosoft YaHei, size10)这段代码把默认控件字体改成微软雅黑能解决大部分中文显示问题。如果放在高分屏上依然模糊在 Windows 上可以加ctypes.windll.shcore.SetProcessDpiAwareness(1)这行调用但注意这段只在 Windows 平台有效mac 和 Linux 可以忽略。5.4 Flask 接口本机能访问局域网别人连不上现象启动 Flask 实例后自己的浏览器访问http://127.0.0.1:5000正常但同事在同一局域网通过你的 IP 访问超时。原因app.run()里默认host127.0.0.1这个地址只绑定本机回环网卡外部请求根本到不了程序。解决把启动行改成app.run(host0.0.0.0, port5000)这样程序会绑定所有可用网卡外部设备才能通过你的局域网 IP 访问。需要说明的是0.0.0.0不代表对外开放公网它只是监听本机所有网卡真实风险取决于你所在网络环境。改完如果不确定本机 IPWindows 下用ipconfig、mac/Linux 下用ifconfig查看。5.5 合并 Excel 时报错工作表不存在或者读取不到任何文件现象excel_merge跑完报RuntimeError: 指定目录下没有可合并的 Excel 文件或者提示工作表不存在。原因glob匹配的是*.xlsx如果你的输入目录里实际放的是.xls后缀的老版本文件匹配不到sheet_name传了不存在的表名也会报 ValueError。解决先确认文件是不是真的以.xlsx结尾很多从系统导出的文件看似 Excel实际是.xls或.csv。要在合并脚本里兼容.xls把glob.glob(f{input_dir}/*.xlsx)改成glob.glob(f{input_dir}/*.xls*)即可。如果只想读指定名称的工作表先跑一段小代码把工作簿里的 sheet 名打印出来再传参别靠猜。这属于典型的输入不合法问题调试时最有效的办法是一边打印glob结果一边打印read_excel的 sheet 列表。6. 二次开发思路把实例从能跑改成能用把单个实例跑通不算本事能把两三个实例拼成一个解决实际问题的工具才叫会玩游戏。我从这套资源里总结了一套改造流程简称「挑、封、拼」三步。挑是第 2 章说的按场景找实例封是把脚本里的主逻辑封装成函数拼是让多个实例通过文件或数据库串联起来。以「资讯采集 数据汇总 Web 展示」为例一个完整的小型信息聚合工具实际上就是把news_crawler、excel_merge、flask_book_api三个实例拼在一起中间用 CSV 和 SQLite 过渡。改造时我习惯先把爬虫脚本里的fetch_titles改成可导入函数并让它返回结构化结果而不是直接写死文件名这样后续既能落盘也能直接入库。对照第 4 章那段代码改造点只有一个把fetch_titles里的 CSV 写入逻辑抽到函数末尾并增加一个to_db参数from news_crawler import fetch_titles data fetch_titles(https://example-news-site.com/list, page, Python, 1, 10) # 把采集结果直接写入 SQLite而不是先落 CSV 再手动导入 import sqlite3 with sqlite3.connect(news.db) as conn: conn.execute(CREATE TABLE IF NOT EXISTS news(title TEXT, url TEXT)) conn.executemany(INSERT INTO news(title, url) VALUES(?, ?), [(item[title], item[url]) for item in data])这样改造的收益很明显爬虫和 Web 接口共享同一个数据库Flask 那边把查询路由指向news表整个采集、存储、展示链路就闭环了。验证改造是否正确我习惯用一个最简单的方法先用 1 到 2 页的抓取范围跑通全程确认数据库里有数据再从 Flask 接口请求一次看返回的 JSON 是否包含刚写入的那几条记录。这条验证路径不依赖外部服务随时可以重复跑排错也直观。这套资源里 100 个实例大多数都带if __name__ __main__保护天然适合被外部导入调用。我之前接到一个需求把散落在十几个目录的报表文件按日期合并后自动生成预览页面。当时的做法就是先拿excel_merge做了数据合并再把flask_book_api的路由改成读取合并结果前后不到两小时就交付了没有写一行从头开始的新逻辑全是在已有实例上改参数、换数据源。从那以后我每次拿到任何源码包都会先做一遍「挑、封、拼」的环境梳理确认入口、参数和输出再动手这个习惯帮我省掉了大量排错时间。希望帮到你。本文还有配套的精品资源点击获取