简介面向Python初学者的源码实例合集集中了100个可独立运行的python程序覆盖文件处理、网络爬虫、数据分析、图形用户界面、小游戏开发等常见练习场景。每个实例都配有可供直接运行的python源码部分实例额外附带txt说明文档、html结果展示页、js交互脚本、xml配置文件或css美化样式便于对照学习代码结构、运行逻辑以及前后端联调的基本思路。整个资源包共2003个文件其中1751个py文件为绝对主体另有133个txt说明、37个html页面、30个js文件、21个xml及16个css等辅助材料压缩包整体大小74.29MB目录按实例序号组织检索定位相当方便。已有2752人学习下载适合正在刷题巩固语法、准备课程设计或希望借助经典案例提升编程能力的初学者按实例逐个调试也能较快积累排错经验。1. 项目定位与价值从拿来就跑到改造成自己的工具箱如果你手头有一套覆盖爬虫、GUI、数据处理、自动化办公、小游戏等场景的python100个源码实例最直观的用法不是挨个看而是把它当成一个代码仓库遇到需求时翻到对应分类复制、改参数、跑起来。这套资源里的每一个实例都是完整可独立运行的脚本不是零碎的功能片段有入口函数、有注释、有运行说明。刚学完语法的人可以照着代码逐行理解赶工期的人可以直接提取中间件或爬虫逻辑改造成自己的服务。它适合所有想把Python落到实际任务的人哪怕你只写过练习题也能通过这份资源少走弯路。2. 资源全貌与架构设计100个实例如何组织、技术栈选型2.1 目录结构与分类逻辑拿到源码之后先看目录。整套资源采用按功能分层的目录结构每个实例独立放在一个文件夹里内部至少包含一个.py文件和一个README.md说明文件。这样做的好处是每个实例可以单独运行不依赖其他文件夹同时实例之间没有共享全局变量避免相互污染。目录大致如下python100/ ├── 01_basic_syntax/ # 基础语法实例 │ ├── 01_fibonacci/ │ │ ├── fibonacci.py │ │ └── README.md │ └── 02_list_comprehension/ ├── 02_file_processing/ # 文件与目录处理 │ ├── 01_batch_rename/ │ ├── 02_log_parser/ │ └── 03_csv_splitter/ ├── 03_network/ # 网络与爬虫 │ ├── 01_http_downloader/ │ ├── 02_news_crawler/ │ └── 03_proxy_checker/ ├── 04_gui/ # 桌面GUI │ ├── 01_calculator/ │ ├── 02_to_do_list/ │ └── 03_file_manager/ ├── 05_data_processing/ # 数据处理与可视化 │ ├── 01_excel_cleaner/ │ ├── 02_time_series_plot/ │ └── 03_json_to_sqlite/ ├── 06_automation/ # 自动化办公 │ ├── 01_word_report/ │ ├── 02_email_sender/ │ └── 03_pdf_merger/ ├── 07_game/ # 小游戏 │ ├── 01_guess_number/ │ └── 02_tetris_basic/ ├── 08_tools/ # 常用小工具 │ ├── 01_qrcode_generator/ │ └── 02_pdf_password_remover/ └── requirements.txt # 全局依赖清单目录命名有规律数字前缀表示难度或顺序后面的英文词描述功能。我一般会先看03_network和05_data_processing因为这两个分类里的实例最能直接转化为工作产出比如爬虫保存 Excel、日志解析生成报表。2.2 技术栈与依赖清单requirements.txt里列出的依赖并不多核心是第三方库。整套资源基于 Python 3.8 开发兼容 3.10、3.11。常用依赖如下库名用途在哪些实例中出现requestsHTTP 请求、爬虫03_category 下大部分实例beautifulsoup4HTML 解析、数据抽取新闻爬虫、商品列表pandas数据清洗、表格处理05_data_processing 全部matplotlib图表绘制时间序列、统计图openpyxl读写 Excel .xlsx自动化报表PyQt5 或 tkinterGUI 界面04_gui 分类reportlab生成 PDF02_file_processing选择这些库的理由很直白它们是 Python 生态里最稳定、文档最全的遇到报错时搜索一下就能找到解决方案。GUI 实例中tkinter是标准库不额外安装适合入门少数实例用PyQt5做复杂布局可以视作进阶参考。除了第三方库每个实例内部会尽量只用标准库完成基础功能比如json、csv、re、os、argparse等。这样当你把某个实例单独拷走时不需要安装一大堆依赖。2.3 实例之间的设计约定源码实例不是随手写的脚本它们有一致的写法约定目的是让你能快速理解并在多个实例之间互相复制代码。每条约定在README.md里都有一句话说明。约定一每个实例的入口函数叫main()并且放在文件末尾调用。调用前会有一个if __name__ __main__:判断。这样既能单独运行也能被其他脚本import后复用。约定二输入路径和输出路径都通过argparse从命令行传入硬编码路径只出现在默认值里。比如爬虫实例默认输出到当前目录但你可以用--output参数指定。约定三日志统一使用logging标准库输出到控制台的同时可选写入文件。这样你看到INFO日志时知道这是正常流程ERROR是出错点。约定四所有对外提供的函数都有 docstring 描述输入输出。这不仅是文档习惯更是为了让你在二次开发时能直接用help()查看参数含义。比如02_log_parser实例中的部分代码import argparse import logging import re from collections import Counter logging.basicConfig(levellogging.INFO, format%(asctime)s - %(levelname)s - %(message)s) def parse_log(file_path, top_n10): 从日志文件中提取IP并统计出现次数。 Args: file_path (str): 日志文件路径。 top_n (int): 返回出现次数最多的前N个IP。 Returns: list: 列表元素为 (IP地址, 出现次数) 元组。 ip_pattern r\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b ip_counter Counter() with open(file_path, r, encodingutf-8) as f: for line in f: ips re.findall(ip_pattern, line) ip_counter.update(ips) return ip_counter.most_common(top_n) def main(): parser argparse.ArgumentParser(description日志IP统计工具) parser.add_argument(logfile, help日志文件路径) parser.add_argument(--top, typeint, default10, help统计数量前N) args parser.parse_args() result parse_log(args.logfile, args.top) for ip, count in result: print(f{ip}\t{count}) if __name__ __main__: main()这段代码解析日志文件里的 IP 地址统计出现次数。argparse让命令行用法变得清晰re的正则表达式匹配 IPv4Counter负责排序。如果你需要统计的不是 IP 而是别的字段比如 URL、用户 ID只改ip_pattern和对应的解析逻辑就行。这样的设计约定让你在组装多个实例时非常顺手。比如把日志分析的输出接到后续的自动化报表实例只需要在代码里调用parse_log函数而不是通过文件中间结果传递。3. 核心模块代码拆解爬虫、GUI与数据处理实例的运行逻辑3.1 网络爬虫实例抓取公开数据并保存为CSV03_network/02_news_crawler是一个典型的爬虫实例目标是从一个简单的新闻列表页抓取标题、发布时间和正文摘要保存到 CSV。这里隐去了真实网站用example.com代替。import requests from bs4 import BeautifulSoup import csv import time import argparse def fetch_page(url): 获取页面HTML失败时重试两次。 headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)} for attempt in range(3): try: response requests.get(url, headersheaders, timeout10) response.raise_for_status() return response.text except requests.RequestException as e: print(f第{attempt 1}次请求失败: {e}) time.sleep(2) return None def parse_news(html): 解析新闻列表页提取标题、链接、摘要。 soup BeautifulSoup(html, html.parser) news_items [] # 假设页面结构每个新闻条目是 div classnews-item for item in soup.select(div.news-item): title_tag item.select_one(h2 a) summary_tag item.select_one(p.summary) if title_tag is None: continue title title_tag.text.strip() link title_tag.get(href) summary summary_tag.text.strip() if summary_tag else news_items.append({ title: title, link: link, summary: summary, }) return news_items def save_to_csv(news_items, filename): 将新闻数据写入CSV文件。 with open(filename, w, newline, encodingutf-8-sig) as f: fieldnames [title, link, summary] writer csv.DictWriter(f, fieldnamesfieldnames) writer.writeheader() writer.writerows(news_items) def main(): parser argparse.ArgumentParser(description新闻列表爬虫) parser.add_argument(url, help目标URL) parser.add_argument(--output, defaultnews.csv, help输出CSV文件路径) args parser.parse_args() html fetch_page(args.url) if html is None: print(无法获取页面退出) return items parse_news(html) save_to_csv(items, args.output) print(f成功保存 {len(items)} 条新闻到 {args.output}) if __name__ __main__: main()这段代码有三个关键点。一是fetch_page里设置了重试机制网络波动时不会立刻失败而是休息 2 秒再试三次失败才放弃这比裸requests.get可靠得多。二是parse_news使用select方法按 CSS 选择器定位目标元素比嵌套find更清爽以后网站结构变化时改选择器即可。三是save_to_csv指定了UTF-8-SIG编码这样生成的 CSV 在 Windows 上用 Excel 打开不会中文乱码。运行方式很简单python news_crawler.py https://example.com/news --output today_news.csv。如果要抓取多页常见做法是循环调用fetch_page并拼接 URL 参数然后在代码里加一个for page in range(1, total_pages)。需要注意请求频率加time.sleep(1)避免被封。3.2 GUI实例用tkinter搭建一个简易计算器04_gui/01_calculator展示了用tkinter写一个带按钮的图形界面。它比命令行交互更直观适合日常小工具快速实现。import tkinter as tk from tkinter import messagebox def calculate(): try: expression display.get() result eval(expression) display.delete(0, tk.END) display.insert(0, str(result)) except (SyntaxError, ZeroDivisionError, NameError): messagebox.showerror(错误, 表达式不合法) def button_click(char): display.insert(tk.END, char) def clear(): display.delete(0, tk.END) root tk.Tk() root.title(简易计算器) root.geometry(300x400) display tk.Entry(root, font(Arial, 20), justifyright) display.pack(filltk.BOTH, padx10, pady10) buttons [ 7, 8, 9, /, 4, 5, 6, *, 1, 2, 3, -, 0, ., C, , ] row 0 col 0 for btn in buttons: if btn C: cmd clear else: cmd lambda bbtn: button_click(b) # 注意用默认参数固化循环变量 button tk.Button(root, textbtn, font(Arial, 15), commandcmd) button.grid(rowrow, columncol, stickynsew, padx2, pady2) col 1 if col 3: col 0 row 1 equal_btn tk.Button(root, text, font(Arial, 20), commandcalculate) equal_btn.grid(rowrow, column0, columnspan4, stickynsew, padx2, pady2) root.mainloop()这里最容易踩坑的是lambda表达式。如果写成lambda: button_click(btn)Python 闭包会记住btn的循环引用最终所有按钮都点击同一个值。所以代码里用了默认参数lambda bbtn把当前值固化成参数。这个技巧在写 GUI 或批量绑定事件时非常常见。eval函数可以执行字符串里的表达式但安全风险高。原作者给出的实例只用于本地桌面工具没接触网络输入。如果你要改成网络服务就需要换成ast.literal_eval或写一个简单解析器否则等于把服务器大门打开。3.3 数据处理实例用pandas清洗并可视化Excel数据05_data_processing/01_excel_cleaner处理的场景是拿到一份包含缺失值、重复行、格式混乱的 Excel经过清洗后得到结构化数据并输出一张汇总图。这是办公自动化里最高频的需求。import pandas as pd import matplotlib.pyplot as plt import argparse def clean_data(input_file): 读取Excel清洗数据并返回DataFrame。 df pd.read_excel(input_file, engineopenpyxl) # 1. 删除完全重复的行 df df.drop_duplicates() # 2. 删除所有列都为空的无效行 df df.dropna(howall) # 3. 填充重要字段的缺失值比如销售金额填0 if amount in df.columns: df[amount] df[amount].fillna(0) # 4. 将日期列统一格式 if date in df.columns: df[date] pd.to_datetime(df[date], errorscoerce) df df.dropna(subset[date]) # 5. 移除明显异常值比如金额为负数业务上不可能 if amount in df.columns: df df[df[amount] 0] return df def visualize_by_category(df): 按分类字段统计金额并绘制柱状图。 if category in df.columns and amount in df.columns: summary df.groupby(category)[amount].sum().sort_values(ascendingFalse) summary.plot(kindbar, figsize(10, 6)) plt.title(Amount by Category) plt.xlabel(Category) plt.ylabel(Total Amount) plt.xticks(rotation45) plt.tight_layout() plt.savefig(category_summary.png, dpi100) plt.close() def main(): parser argparse.ArgumentParser(descriptionExcel数据清洗工具) parser.add_argument(input, help输入Excel路径) parser.add_argument(--output, defaultcleaned.xlsx, help清洗后输出路径) args parser.parse_args() cleaned_df clean_data(args.input) cleaned_df.to_excel(args.output, indexFalse, engineopenpyxl) visualize_by_category(cleaned_df) print(f清洗完成数据量: {len(cleaned_df)} 行图表已保存) if __name__ __main__: main()清洗逻辑每一步都有序先去除完全重复行再删掉空白行然后针对业务字段做缺失值和异常值处理。pd.to_datetime遇到无法解析的日期会变成NaT再用dropna剔除这样就不会让脏数据混进结果。数据量大的时候to_excel比to_csv慢但胜在保留多工作表。如果你需要在同一份输出里放多个结果表可以额外加一个ExcelWriter对象。这个实例本身不追求性能侧重点是把业务规则变成可复现的数据管道。4. 运行环境与避坑实战让100个实例在自己机器上跑通4.1 环境准备与一键运行方式拿到源码后不要直接双击运行而是建议创建虚拟环境。按下面的步骤做能避免大部分环境冲突。# 进入项目根目录 cd python100 # 创建虚拟环境 python3 -m venv venv # 激活虚拟环境Windows venv\Scripts\activate # 激活虚拟环境macOS/Linux source venv/bin/activate # 安装所有依赖 pip install -r requirements.txtrequirements.txt里指定了最小版本比如requests2.25、pandas1.2。这些版本都是经过验证的不要随手升级到刚发布的新大版本因为某些旧实例可能依赖旧版 API。运行单个实例时先看看该实例的README.md里面会写明必需的输入文件格式和示例命令。大多数实例都使用argparse设计命令行接口所以用法基本统一python 02_log_parser.py server.log --top 20如果你在 IDE 里运行也可以在main()上右键选择运行但需要提前在运行配置里填好参数。一个不熟悉的实例建议先加--help看一下参数定义python 03_news_crawler.py --help4.2 常见问题排查从ModuleNotFoundError到中文乱码这一份源码因为实例数量多跨平台运行时的坑也特别多。我梳理了五条高频问题覆盖我自己和身边同事踩过的雷。现象一ModuleNotFoundError: No module named PyQt5原因虚拟环境里没安装requirements.txt或者安装时用了系统 Python 导致库装到了别的位置。也有的实例单独依赖pyqt5-tools需要额外安装。解决先确认激活的是哪个环境which python或pip show pyqt5看看路径。如果确实没装跑pip install -r requirements.txt。个别 GUI 实例在 macOS 上还需要brew install tcl-tk否则tkinter可能缺失。现象二爬虫运行时出现SSL: CERTIFICATE_VERIFY_FAILED原因Python 默认验证 SSL 证书而某些公司的网络代理或自签名证书会导致校验失败。解决临时关闭证书验证要谨慎可以在requests.get里加verifyFalse同时屏蔽警告。但如果是抓取公开数据更好的做法是更新证书库。最干净的方法是从官方下载并安装certifi然后用requests.Session挂载证书。如果只是测试verifyFalse够用但生产环境绝对不建议。现象三用 Excel 打开生成的 CSV 全部糊在一列里原因CSV 写入时没有指定newline或编码用了utf-8而不是utf-8-sig。Windows 上 Excel 默认用 GBK 解析遇到 UTF-8 的逗号分隔符会识别失败。解决写入时用open(filename, w, newline, encodingutf-8-sig)这是源码实例里已经踩平的路。如果你自己写 CSV 脚本直接抄这个写法。现象四GUI 界面在高 DPI 屏幕上显示模糊原因Windows 缩放比例不是 100% 时tkinter 默认不启用自适应缩放。Qt 也需要注意AA_EnableHighDpiScaling标志。解决tkinter 实例可以在脚本开头加一段声明from ctypes import windll windll.shcore.set_process_dpi_awareness(1)PyQt5 则需要在创建QApplication之前设置QApplication.setAttribute(Qt.AA_EnableHighDpiScaling, True)。这个坑在笔记本外接显示器时特别明显我每次都会先补上这段代码。现象五运行05_data_processing实例时找不到openpyxl但明明已安装原因pandas 读取.xlsx依赖openpyxl读取.xls依赖xlrd。如果你安装的是新版 pandas可能不再自动带上xlrd报错信息也不直接提示缺哪个库。解决确认文件扩展名。.xlsx用openpyxl.xls用xlrd。在虚拟环境里分别pip install openpyxl xlrd。我建议统一把旧.xls文件转换成.xlsx再处理省心。每条问题都可以在源码的docs/FAQ.md里找到对应条目原整理者把问题描述和解决方法都记录在案你遇到问题时可以先去那里搜。5. 二次开发思路把这些源码改造成自己的项目5.1 如何挑选和替换模块拿到一套 100 个实例不需要全部看而是按需取样。我的做法是先跑通一个目标实例然后把它当作骨架替换掉内部实现。比如想要一个带进度条的下载工具可以先从01_http_downloader开始它已经实现了分段下载、断点续传。此时只需要保留download_chunk函数把界面部分换成你自己的 UI 框架。替换模块的关键在于认准接口。原实例的main()和核心业务函数通常只有一个依赖关系你在复制时尽量保持函数签名不变这样测试还是原来的输入不会一改就崩。改造前后对比表实例原功能替换目标改动点news_crawler抓新闻列表抓取商品列表修改页面选择器和字段log_parser统计IP统计接口耗时换正则、换统计维度excel_cleaner清洗销售表清洗用户信息表修改业务规则列5.2 如何组合多个实例完成一个复杂任务单个实例解决的是点问题组合起来才能对付线问题。比如你能做一个日常自动报表 pipeline用爬虫实例抓取数据用数据处理实例清洗结果再用 GUI 实例生成一个小工具让同事点击运行。这套流程其实就是把一个个main()变成可导入的函数。组合时要避免文件中间态。如果爬虫实例输出 CSV清洗实例又读入 CSV那中间文件丢了就很麻烦。建议在你的项目里保持函数级调用比如from news_crawler import fetch_page直接把请求结果传给下一个函数。机器学习、数据分析领域常说 data pipeline这里同理。5.3 我的改造习惯从复制到抽象的迭代过程最初我拿到这套源码时就是复制粘贴改了路径能跑就算成功。但用了一个月后我发现每个实例里都有重复的代码片段解析命令行参数、读文件、写结果。于是我开始把这些片段抽离到一个统一的工具模块自己的项目因此瘦了一大圈。我的习惯是每次要移植一个实例先老老实实跑通然后读一遍核心函数问自己如果入参变成字典而不是文件路径我改哪里 这能逼着你找到耦合点。接着我会把超时的参数、编码、日志开关改成可配置而不是硬编码在函数内部。这样实例就从一次性脚本变成了可复用组件。特别是爬虫和数据处理这两个领域配置化是刚需。比如新闻爬虫里的User-Agent、请求间隔、超时时间我都会放到config.json或环境变量里这样在开发、测试、生产环境切换时不需要改代码逻辑。从那时起我每次接手新的源码资源都强制自己走一遍跑通实例 → 识别接口 → 抽离公共代码 → 写测试用例的流程。这套源码让我最初的一周效率翻倍也让我明白了真正有用的源码不是用来抄的而是用来理解设计意图的。希望这些改造思路也能帮到你。本文还有配套的精品资源点击获取 SEO 优化官网定制响应式建站教育培训建站