尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Python入门实战:从环境搭建到自动化处理Excel

Python入门实战:从环境搭建到自动化处理Excel 最近有个画面感很强的段子辅导员推开宿舍门看见你在打游戏结果期末你交了一个用 Python 写的自动处理成绩表的脚本甚至还能把班级通知自动整理成 Excel。他问“你不是每天都在打游戏吗怎么突然学会了 Python”其实这不是段子而是很多大学生真实走过的路径。表面上看你是在打游戏实际上你可能在折腾游戏存档、批量改文件、查攻略、写自动化脚本。等回头看你会发现那些“看起来不务正业”的操作本质上就是编程训练拆问题、找规律、写脚本、跑结果、出 bug、再修。这篇文章不打算讲什么“一个月精通 Python”的鸡汤而是从真实场景出发把 Python 入门路上最关键的几个部分讲透环境怎么搭、编辑器怎么配、第一个脚本怎么写、报错怎么查、虚拟环境到底有什么用。读完之后你至少能做到一件事在一台新电脑上从零开始写出并运行一个能实际帮到你日常任务的 Python 脚本。1. 真正要解决的问题为什么“玩着玩着”就把 Python 学会了Python 能让一个看起来一直在打游戏的人突然之间会写代码这件事背后不是天赋而是学习路径的差异。很多人学 Python 卡住不是因为笨而是因为用错了姿势。翻开一本 600 页的教材从第一章“计算机发展史”开始读读到第四章还在讲变量到第五章就已经想放弃了。这种学法把编程变成了“文科背诵”完全背离了编程本身“边做边学”的规律。而另一类人是怎么学会的他们通常有一个非常具体的痛点游戏存档太多想批量备份、课程表想转成 ICS 日历、Excel 表格要合并几百个文件、导师给的 CSV 数据需要清洗。为了把这些重复劳动去掉他们开始搜索“Python 怎么做这个”然后一边搜一边改一边跑。整个过程里Python 不是一本教材而是一个工具箱每种工具都是为了解决眼前的问题而学的。所以这篇文章真正想做的事不是把 Python 语法书重新抄一遍而是带你走一条更接近真实开发者的路径先布置一个小而有用的任务然后围绕任务拆出环境、语法、脚本、排错、工程化几个模块一步一步跑通。判断自己在哪个阶段很重要。如果你连 Python 是什么都不清楚那环境准备和基础脚本就是你的重点如果你已经会写一些简单脚本但每次换电脑都要重新折腾半天环境那虚拟环境和依赖管理就是你该补的短板如果你已经能写代码但经常被各种报错搞到心态崩溃那这篇文章的排错章节会帮上忙。2. Python 的核心概念与适用场景2.1 Python 到底是什么Python 是一种解释型、动态类型的高级编程语言。解释型的意思是代码不需要像 C/C 那样先编译成机器码而是由 Python 解释器逐行读取并执行。这个特性带来的直接好处是开发速度快改一行代码保存立刻运行马上看到结果。对于写脚本、做数据分析、写自动化工具这类场景这个反馈速度非常重要。动态类型的意思是你在声明变量时不需要指定类型解释器会在运行时根据赋值自动推断。比如下面这段代码在静态语言里可能要写两行类型声明在 Python 里直接赋值即可name 张三 age 20 print(f{name} 今年 {age} 岁)变量name被赋值为字符串age被赋值为整数解释器自己会处理类型变化。这个特性让 Python 的上手难度大幅下降但也带来一个代价如果类型传错了有时候要到运行时才会暴露问题。所以现在很多 Python 项目会引入类型注解或 mypy 做静态检查这是后话新手阶段可以先不纠结。2.2 为什么 Python 适合快速上手代码可读性是 Python 的核心设计哲学之一。它用缩进来表示代码块而不是大括号。强制缩进看起来是限制实际上是在帮你培养良好的代码习惯。一份写得规整的 Python 脚本即使完全没注释读懂的概率也比同等规模的 Java 或 C 高很多。生态丰富是 Python 更大的优势。不管你想做网站Django、Flask、数据分析pandas、NumPy、爬虫Requests、BeautifulSoup、自动办公openpyxl、python-docx、还是量化策略回测backtrader、vnpy都有成熟的第三方库可以直接使用。这种“拿来即用”的能力让 Python 特别适合用小成本解决实际问题。但也要说清楚边界Python 不适合做高性能计算、不适合写底层驱动、不适合做超大并发的高性能服务端。这些场景下 C、Go、Rust 可能更合适。不过对于大多数学生、数据分析师、运维研发和办公自动化需求来说Python 的性能完全够用真正的瓶颈往往是代码逻辑而不是语言本身。2.3 Python 2 和 Python 3 别再搞混这个问题老生常谈但确实每天还有人在纠结。Python 2 官方已经停止维护不要再用它写新项目。现在所有主流框架和库都兼容 Python 3。安装的时候看清版本号是 3.x 而不是 2.x。python --version如果输出Python 3.x.x说明环境正常。如果你在 Linux 上装过某些系统自带工具可能会遇到python指向 Python 2、python3指向 Python 3 的情况。这种只需要在命令里区分别搞混即可。以后写代码、装依赖统统以 Python 3 为准。3. 环境准备与 Python 安装从零跑通最小环境关于“怎么安装 Python”这件事很多教程写了 10 个步骤但真正的关键环节只有三四个。下面以 Windows 系统为例展开macOS 和 Linux 的思路是一样的只是安装包来源略有不同。3.1 Windows 下安装 Python到 Python 官网下载对应系统的安装包版本选最新的稳定版即可。下载完成后双击运行注意最重要的一步勾选Add Python to PATH。这一步如果不勾选装完 Python 后在命令行输入python会提示找不到命令。这个“找不到命令”几乎是大一新生第一次装 Python 后遇到最多的问题根源就是 PATH 没有配置好。安装时可以选Install Now默认安装也可以选Customize installation自定义路径。对新手来说默认安装路径就足够但有一点值得注意安装路径最好不要包含中文和空格否则后面有些第三方库或工具链可能会出现奇怪的路径解析问题。安装完成后打开命令行Win 键输入cmd回车输入python --version如果能显示版本号说明安装成功。如果提示找不到命令大概率是刚才的 PATH 没勾选重新运行一下安装包选择 Modify勾选 Add Python to PATH 即可。3.2 mac OS 和 Linux 下的安装思路macOS 上一部分系统自带 Python 3但版本可能比较旧。推荐用 Homebrew 安装brew install pythonLinuxDebian/Ubuntu系统上可以用sudo apt update sudo apt install python3 python3-pip这里要提醒一下Linux 很多系统工具依赖自带的 Python不建议直接替换系统默认 Python 版本而是用python3命令来区分。真正需要管理多版本时可以用 pyenv 这类工具但那是进阶话题新手可以先把python3用好。3.3 包管理工具 pip 的正确姿势pip 是 Python 的依赖安装工具。安装 Python 时通常会自动装上 pip验证方法pip --version安装第三方库的方法很简单pip install requests如果你在命令行里运行pip会提示“pip 不是内部或外部命令”说明 Python 的 Scripts 目录没有加入 PATH。Windows 下安装 Python 时如果勾选了 Add Python to PATH一般会自动带上 Scripts 目录。如果没有需要手动把C:\Users\你的用户名\AppData\Local\Programs\Python\Python311\Scripts这样的路径加入环境变量。更稳妥的方式是用python -m pip来调用这个写法不依赖 Scripts 目录是否在 PATH 里python -m pip install requests4. 开发环境搭建VSCode 配置 Python 开发环境有了 Python 解释器下一步是找一个趁手的编辑器。这里推荐 Visual Studio Code它对 Python 的支持非常成熟而且完全免费安装体积也不算大。4.1 安装 VSCode去官网下载安装包同样注意安装路径不要有中文。安装过程基本一路下一步。装好后打开左侧菜单栏点击“扩展”图标搜索“Python”安装微软官方发布的 Python 扩展。4.2 选择解释器按CtrlShiftPmacOS 是CmdShiftP打开命令面板输入Python: Select Interpreter选择你刚才安装的 Python 3.x 解释器。这样 VSCode 里的代码补全、语法检查、运行按钮都会使用正确的解释器环境。这一步常见的问题是有多个 Python 解释器比如系统自带的、Anaconda 带的、手动安装的。选混了会导致某些库“代码里能 import但运行时找不到”。判断方法很简单你 pip 装库用的解释器和 VSCode 里选择的解释器必须是同一个。4.3 创建项目文件夹与第一个 Python 文件建议为每个学习项目单独建一个文件夹不要把所有脚本都堆在桌面上。比如建一个python_learn文件夹然后在 VSCode 里用“文件 - 打开文件夹”打开它。点击新建文件命名为hello.py输入print(Hello, Python!)然后按右上角的运行三角形按钮或者在终端执行python hello.py看到输出的Hello, Python!说明你的开发环境已经闭环了编辑器写代码、解释器跑代码、终端看结果。这个基本流程是后续所有开发的基础。4.4 常见配置误区不要每台电脑都重新装一遍包很多新手学了一段时间后会发现换一台电脑之前装的那些库全没了又要重新pip install一遍。更合理的方式是在项目根目录维护一个requirements.txt文件用来记录所有依赖库和版本。生成方式是pip freeze requirements.txt换电脑后只需要执行pip install -r requirements.txt就能把项目需要的依赖一次性装回来。这个习惯越早建立越好因为等你的项目复杂到有几十个依赖时手动重装会非常痛苦。5. 完整示例一用 Python 批量处理 Excel 文件下面写一个贴近学生和办公场景的实例合并多个 Excel 文件中的所有 Sheet 数据并把结果输出到一个新文件里。这个例子用到两个库pandas和openpyxl。pandas 是数据分析领域最常用的库openpyxl 负责读写 Excel 文件。5.1 安装依赖pip install pandas openpyxl如果安装速度慢可以指定国内镜像源pip install pandas openpyxl -i https://pypi.tuna.tsinghua.edu.cn/simple5.2 准备测试数据在项目文件夹下建一个data目录里面放 3 个 Excel 文件每个文件里可以有一到多个 Sheet。这里我们不手动创建而是通过脚本生成测试数据。# 文件路径create_test_data.py import pandas as pd # 创建三个测试 Excel 文件 for i in range(1, 4): df pd.DataFrame({ 姓名: [f学生{i}, f学生{i10}], 成绩: [80 i, 90 - i] }) with pd.ExcelWriter(fdata/test_{i}.xlsx) as writer: df.to_excel(writer, sheet_name成绩表, indexFalse) df2 pd.DataFrame({课程: [语文, 数学], 学分: [2, 3]}) df2.to_excel(writer, sheet_name课表, indexFalse) print(测试数据生成完毕)运行python create_test_data.py后data目录下会出现 3 个 xlsx 文件。5.3 合并脚本现在写真正的合并脚本# 文件路径merge_excel.py import glob import pandas as pd file_list glob.glob(data/*.xlsx) print(f找到 {len(file_list)} 个 Excel 文件) all_data [] for file in file_list: # 读取文件中的所有 Sheet sheets pd.read_excel(file, sheet_nameNone, engineopenpyxl) for sheet_name, df in sheets.items(): # 加一列记录来源信息方便溯源 df[来源文件] file df[来源Sheet] sheet_name all_data.append(df) # 合并所有 DataFrame merged_df pd.concat(all_data, ignore_indexTrue) # 输出到新文件 merged_df.to_excel(merged_result.xlsx, indexFalse, engineopenpyxl) print(合并完成共写入, len(merged_df), 行数据)代码逻辑很简单用glob找到所有 xlsx 文件用sheet_nameNone读取每个文件里的所有 Sheet然后加两列来源信息最后用pd.concat合并并输出。5.4 运行与验证python merge_excel.py预期输出类似找到 3 个 Excel 文件 合并完成共写入 12 行数据打开生成的merged_result.xlsx应该能看到每个 Sheet 的数据都被合并到了一起并且标出了来源文件。这种脚本在处理几十个班级的作业、多个月的报表、多台机器的日志时非常实用。6. 完整示例二写一个“打游戏”风格的小游戏脚本既然标题里提到“打游戏”这里就写一个文本版的猜数字游戏。麻雀虽小五脏俱全这个例子里会用到随机数、循环、条件判断、输入处理和异常捕获正好覆盖 Python 入门最常见的语法点。# 文件路径guess_number.py import random target random.randint(1, 100) attempts 0 max_attempts 7 print(我已经想好了一个 1 到 100 之间的数字你有 7 次机会猜中它。) while attempts max_attempts: try: guess int(input(请输入你的猜测)) except ValueError: print(请输入一个有效的整数) continue attempts 1 if guess target: print(猜小了再往大一点试。) elif guess target: print(猜大了再往小一点试。) else: print(f恭喜你用了 {attempts} 次猜中了数字 {target}。) break else: print(f很遗憾机会用完了正确答案是 {target}。)运行方式python guess_number.py这个脚本里有几个值得学习的点random.randint(1, 100)生成随机数。while循环控制猜的次数。try...except ValueError捕获用户输入非数字的情况。else和while连用正常跑完循环没 break时执行else分支。如果你想把这个小游戏打包成 exe 发给同学玩可以试试pyinstallerpip install pyinstaller pyinstaller --onefile guess_number.py打包完成后dist目录下会生成一个单独的 exe 文件这个文件在另一台没有安装 Python 的电脑上也能运行。7. 常见问题与排查思路为什么我的代码跑不起来写代码的过程中报错是常态。不要被报错吓到更不要一报错就复制粘贴到搜索引擎里问“怎么办”先自己读一遍报错信息至少能看到是第几行、什么类型错误。下面整理几个高频问题。问题现象可能原因排查方式解决方案python不是内部或外部命令Python 未安装或 PATH 未配置检查安装时是否勾选 Add Python to PATH重新安装并勾选或手动添加 PATHpip不是内部或外部命令Scripts 目录未加入 PATH在命令行执行python -m pip --version使用python -m pip代替pipModuleNotFoundError: No module named pandas未安装 pandas 或解释器选错检查 VSCode 选择的解释器和 pip 使用的解释器是否一致python -m pip install pandas并在 VSCode 中重新选择解释器安装第三方库时超时或速度慢网络问题默认源在国外观察报错中的超时信息使用国内镜像源如清华源pip install xxx -i https://pypi.tuna.tsinghua.edu.cn/simpleExcel 文件无法读取openpyxl 未安装或文件格式不对看报错是否提示缺少 openpyxl安装 openpyxlpip install openpyxl中文字符显示乱码文件编码问题检查 Python 文件头部是否声明编码Python 3 默认 UTF-8确保文件保存为 UTF-8 编码创建表格只能到 65536 行使用了旧版 xls 格式查看库文档和文件格式使用 xlsx 格式openpyxl而非 xlsxlwt 默认限制打包 exe 后体积过大pyinstaller 按默认方式打包了多余依赖检查打包日志和输出文件使用--onefile和--clean参数或使用虚拟环境减小体积第一个问题补充说明在 Windows 命令行里执行python时系统会按 PATH 环境变量中的顺序查找可执行文件。如果 PATH 里没有 Python 的安装目录命令就会提示找不到。这和安全里强调的“最小权限原则”其实有点像系统只按你给定的路径去找东西不会自动“猜”你装在哪儿。第二个问题补充说明ModuleNotFoundError是新手最容易遇到的错误之一。它出现的原因无非两种没装这个库或者装到了别的解释器里。排查时先运行python -m pip list看有没有这个库再看 VSCode 右下角显示的解释器路径。第六个问题值得单独拿出来说。Excel 老格式 xls 的行数上限是 65536 行xlsx 格式则大幅提升。如果你用 pandas 写入数据时发现行数被截断往往是因为某些库默认写了 xls。这里一个重要提醒是日常处理 Excel 优先用openpyxl引擎它支持 xlsx 格式行数上限完全够用不会出现“创建表格只能到 65536 行”的尴尬。8. 最佳实践与工程建议写代码不难但让代码“能维护、能复用、能给别人用”需要一定的工程意识。这一节讲几个从学生项目到真实项目都会用到的原则。8.1 用虚拟环境管理项目依赖很多新手直接全局安装各种库时间一长pip list 里装了几百个包根本分不清哪个项目需要哪个。更麻烦的是不同项目可能需要同一库的不同版本全局装到一处就会冲突。虚拟环境是解决这个问题的标准方案。Python 3.3 以上自带的venv可以直接创建python -m venv venvWindows 下激活虚拟环境venv\Scripts\activatemacOS/Linux 下激活source venv/bin/activate激活后命令行前缀会出现(venv)说明你在虚拟环境中。这时pip install安装的所有依赖只会出现在当前项目的.venv目录里不会污染全局环境。退出环境用deactivate这是一个值得从第一天就养成的习惯。等你的项目要部署到服务器或者换电脑时这种边界清晰的依赖管理可以帮你避免大量麻烦。8.2 脚本要能追溯和记录写脚本时一定要考虑到“三个月后你还看得懂”这个前提。给脚本加清晰的注释、用有意义的变量名、记录输入输出路径这些都比注释写得越多越好更重要。一个比较实用的小习惯脚本开头放一个 docstring写清楚这个脚本是干什么的、需要什么依赖、怎么运行。 合并指定目录下的所有 Excel 文件为一个汇总文件。 用法: pip install pandas openpyxl python merge_excel.py [输入目录] [输出文件] 依赖: pandas, openpyxl 8.3 涉及数据操作的脚本要谨慎如果你写的脚本会修改数据、删除文件、覆盖数据库务必遵守几条安全底线操作前先备份原始数据。先在测试数据上跑通全流程再处理真实数据。涉及删除或覆盖时使用dry_run模式先打印将要执行的操作确认无误后再真正执行。涉及账号密码、Token、数据库连接串时不要硬编码在脚本里使用环境变量或配置文件并且不要把带密钥的文件提交到公开仓库。这一点不是空话很多生产事故都是因为开发者在本地脚本里直接执行df.to_csv(..., overwriteTrue)或 SQLDELETE结果跑完才发现路径写错了。8.4 学会看错误信息而不是到处问人直接搜索报错信息本身是一种能力。好的排查顺序是看报错发生在哪一行。看是什么类型的错误SyntaxError、NameError、TypeError、ModuleNotFoundError。读报错信息中关于原因的提示。带着整段报错和上下文去搜索。不要只搜“Python 报错怎么办”要搜具体的报错文本比如“pandas read_excel FileNotFoundError”。这样找到的答案基本是精准定位的。8.5 保持代码的小步提交哪怕是你自己的个人项目也建议用 Git 做版本管理。每完成一个功能点就提交一次这样代码改坏了可以随时回退不用靠 CtrlZ 或者复制粘贴一堆backup_final_最终版.py。初始化一个仓库很简单git init git add . git commit -m 完成 Excel 合并脚本学会 Git 越早后面的团队协作和项目维护成本就越低。9. 后续学习路线从“会脚本”到“会项目”如果你已经能照着示例写出并运行 Python 脚本下一步应该怎么进阶这里给一个比较实际的路线参考。第一先把 pandas openpyxl 这类数据处理库练熟。数据清洗、合并、透视、筛选是很多场景的高频需求也是 Python 最能“立刻看到价值”的领域。第二学一点网络请求。requests库是 Python 里最常用的 HTTP 客户端之一写几个调用公开接口的小脚本比如查天气、查快递、抓取新闻标题可以快速理解 API 概念。但这里必须提醒涉及网站数据抓取时务必遵守目标网站的 robots 协议和用户协议只抓取合法授权的公开数据不碰需要破解、绕过权限限制、涉及账号登录和验证码的内容。第三理解 Python 的数据类型和面向对象基础。自定义类、继承、封装这些概念等到你写的代码超过几百行时会自然体会到价值。不需要一开始就死磕但要有意识地在项目里使用。第四学一点 web 开发基础。Django 或者 Flask 选一个做一个能登录、能读写数据库的小网站。这会把前面学的 Python 语法、数据库、前端知识串起来也是很多学生的第一个“完整项目”。第五进阶到工程化测试、日志、部署。给脚本写单元测试、用logging模块记录运行状态、用 Docker 打包项目。这些内容在真实开发中是刚需但校园里很少被提起值得自己提前补上。回到开头那个问题为什么“每天都在打游戏”的人能突然学会 Python因为在真实需求驱动下一个能解决实际问题的脚本比反复阅读 600 页的教材更有可能带你跑完全程。只要你能把一个简单任务做到跑通Python 给你的正反馈会强到让你忍不住继续往下学。下一步建议你打开电脑按照这篇文章里的环境步骤装好 Python跑通第一个print(Hello, Python!)然后选一个你身边最烦琐的重复性任务尝试写一个脚本解决它。不需要一次写多复杂能解决一个小问题就是零的突破。
返回列表