你有没有遇到过这样的情况刚装好 Python打开教程第一页就教你写print(Hello, World!)屏幕确实输出了那行字但心里却在嘀咕“然后呢这能用来做什么” 或者你跟着教程一步步敲代码变量、循环、函数都学了一遍但一到自己动手写个小工具就不知道从哪里开始总觉得知识点是散的串不起来。这其实不是你的问题。很多 Python 入门材料包括一些经典书籍的早期章节容易陷入两种极端要么太零散像字典一样罗列语法要么太抽象直接抛概念缺少“为什么需要这个”的场景解释。结果就是你知道了if...else的写法却不清楚什么时候该用if什么时候该把判断逻辑封装成函数你记住了for循环能遍历列表但遇到需要处理一批文件时还是不知道如何组合os.listdir()和循环。真正有效的入门不是从“语法”开始而是从“意图”开始——先明确你想用 Python 解决什么问题再倒推需要哪些语法和工具。这篇文章会换一个顺序带你重新走一遍 Python 基础。我们不按传统章节学而是围绕“如何用 Python 自动化处理日常任务”这个目标把变量、循环、函数、文件操作等核心概念串成一条可操作的路径。目标很简单学完这一篇你不仅能看懂代码更能写出一个能实际运行、解决具体问题的小脚本。1. 别急着写print(Hello, World!)先想清楚你要解决什么问题很多教程一上来就教环境安装、配置编辑器、写第一行代码。这些步骤当然必要但如果缺乏一个明确的目标很容易变成机械操作。我的建议是在安装 Python 之前先花几分钟想一个你想自动化的小任务。比如你经常需要把一批图片的文件名从 “IMG_001.jpg” 改成 “旅行_001.jpg”你每周都要从 Excel 里复制数据整理成周报格式你想监控某个网页的价格变化低于某个数值时提醒自己。哪怕这个任务看起来很简单甚至你觉得“可能用不上 Python”它也会成为你学习过程中的“锚点”。每学一个新概念你都可以问自己“这个功能能帮我解决目标里的哪一步”1.1 环境准备选对工具避免初期挫败Python 的安装过程本身不复杂但从长期使用角度有几点容易踩坑Python 版本选择如果你用的是 Windows 或 macOS直接从官网下载 Python 3.12 的安装包即可。注意勾选“Add Python to PATH”选项这是很多新手卡住的第一步。编辑器选择初期不建议折腾复杂的 IDE。VS Code 或 PyCharm Community 版都是不错的选择它们自带语法高亮、代码提示和调试功能。关键是一开始保持简单打开编辑器新建一个.py文件就能开始写代码。验证安装打开终端Windows 是 CMD 或 PowerShellmacOS/Linux 是 Terminal输入python --version。如果显示 Python 3.x.x说明安装成功。如果报错“命令未找到”说明 PATH 没配置好需要重新安装或手动添加环境变量。注意不要在这个阶段过度优化环境。有些人会花半天时间配置主题、安装几十个插件结果代码一行没写。环境够用就好重点是尽快开始写第一段有意义的代码。1.2 从“任务”反推“需要学什么”假设你选择的锚点任务是“批量重命名图片”。完成它需要几步列出指定文件夹下的所有文件。判断每个文件是不是图片扩展名是 .jpg、.png 等。生成新文件名。执行重命名操作。这四步分别对应 Python 的几个核心概念文件操作、条件判断、循环、字符串处理。你看我们还没写任何代码但已经知道要学什么了而且每个知识点都有明确的应用场景。这种“以终为始”的学习路径比孤立地背诵语法有效得多。2. 变量和数据类型不是用来记的而是用来存中间结果的传统教程会先讲“变量是存储数据的容器”然后列出整数、浮点数、字符串、列表、字典等类型。这种讲法没错但容易让人误以为“必须先背下所有类型才能开始写代码”。其实初期你只需要掌握三种最常用的类型字符串、列表、字典。其他的用到时再查。2.1 字符串处理文本的基础字符串就是你看到的文本比如Hello、批量重命名。它的核心操作是拼接、切片和替换。例如在重命名任务中旧文件名是IMG_001.jpg新文件名可能是旅行_ 001 .jpg。这里就用到了字符串拼接。# 字符串拼接的几种方式 old_name IMG_001 extension .jpg new_name 旅行_ old_name.split(_)[1] extension # 方式1用 拼接 new_name2 f旅行_{old_name.split(_)[1]}{extension} # 方式2用 f-string推荐更直观注意我在这里故意引入了一个还没详细讲的方法split(_)。这是因为真实编码时你经常需要边查边用。重要的是理解意图我们想从IMG_001里提取001而split(_)能按分隔符切割字符串返回一个列表[IMG, 001]然后取第二个元素。2.2 列表用来存一组数据列表就是一系列数据的集合比如[apple, banana, orange]。在批量任务中你会用列表存储所有待处理的文件名。它的核心操作是遍历循环和增删改查。# 列表示例 files [IMG_001.jpg, IMG_002.jpg, IMG_003.jpg] # 如何遍历稍后在循环部分展开2.3 字典用来存键值对字典适合存储有结构的数据。比如你想记录每个文件的新旧名称对应关系可以用字典{IMG_001.jpg: 旅行_001.jpg, IMG_002.jpg: 旅行_002.jpg}。初期如果任务简单可以暂不用字典但知道它的存在很重要。2.4 变量命名的实战原则语法层面变量名不能以数字开头不能包含空格。但更重要的是实战原则用英文命名即使你的项目是中文的。old_name比旧文件名更通用。名字要能看出用途。file_list比a好懂。不要用l小写L、O大写O这类易混淆的字符。变量学习的重点不是记忆所有类型而是理解“什么时候该定义一个变量”。基本原则是如果某个数据后面会用到两次或以上就应该存成变量。比如文件扩展名.jpg在重命名时会出现多次那就应该定义extension .jpg而不是每次硬编码。3. 循环和条件判断把单次操作变成批量处理这是 Python 自动化的核心。循环让你能重复执行一段代码条件判断让你能根据不同情况执行不同操作。3.1 for 循环处理已知数量的重复任务在批量重命名中我们已知要处理文件夹下的所有文件这时用for循环最合适。# 假设我们已经有一个文件列表 files [IMG_001.jpg, IMG_002.jpg, IMG_003.jpg] for file in files: # 这里的 file 会依次等于列表中的每个文件名 print(当前处理文件:, file) # 重命名逻辑会放在这里for file in files:这行代码的意思是对于files列表中的每一个元素临时把它赋值给变量file然后执行缩进块里的代码。缩进是 Python 语法的一部分一般用 4 个空格表示“这些代码属于循环体”。3.2 if 条件判断只处理符合条件的文件如果文件夹里混入了非图片文件比如.txt或.docx我们只想处理图片。这时需要条件判断。for file in files: if file.endswith(.jpg) or file.endswith(.png): print(这是图片文件开始处理:, file) # 重命名逻辑 else: print(跳过非图片文件:, file)if后面跟一个条件表达式值为True时执行缩进块False时跳过或执行else块。常见的条件判断包括字符串判断endswith()以...结尾、startswith()以...开头、in包含。数值比较、、等于、!不等于。逻辑组合and与、or或、not非。3.3 循环与判断的组合使用实际任务中循环和判断总是结合在一起的。批量重命名的核心逻辑就是for file in files: if 是图片文件(file): 新文件名 生成新文件名(file) 执行重命名(file, 新文件名)你看我们甚至可以用中文伪代码先描述逻辑再逐步替换成具体语法。这种方法能帮你聚焦在流程上而不是一开始就陷入语法细节。4. 函数把复杂操作封装成简单指令当代码超过 20 行或者同一段逻辑出现两次以上你就应该考虑用函数了。函数的作用不是“让代码看起来高级”而是“减少重复提高可读性降低出错概率”。4.1 为什么要用函数一个真实场景假设在重命名任务中我们需要从IMG_001.jpg提取编号001。一开始你可能直接写number file.split(_)[1].split(.)[0] # 提取 001但如果有多个地方需要提取编号每次写这么长一串容易出错。而且如果文件名格式变成Photo-001.jpg你得修改所有出现这段代码的地方。如果用函数封装def extract_number(filename): 从文件名中提取编号 # 假设文件名格式为 前缀_编号.扩展名 parts filename.split(_) if len(parts) 1: number_part parts[1].split(.)[0] return number_part else: return None # 如果格式不符合预期返回 None # 使用函数 number extract_number(IMG_001.jpg)这样主流程变得清晰提取逻辑被隔离在一处。将来文件名格式变化只需修改函数内部。4.2 定义函数的实用原则函数名应该是一个动词短语说明它做什么比如extract_number、rename_file。函数长度最好控制在 20 行以内。如果太长说明它可能在做多件事应该拆分。使用文档字符串函数说明简要描述函数用途和参数。尽量让函数返回一个值而不是直接修改外部变量。这有利于测试和复用。4.3 函数在批量任务中的角色在完整的重命名脚本中函数可以把流程分解成几个独立部分def get_files(directory): 获取目录下所有文件 # 使用 os.listdir()稍后介绍 pass def is_image(file): 判断是否为图片文件 return file.endswith((.jpg, .png, .gif)) def generate_new_name(file): 生成新文件名 number extract_number(file) return f旅行_{number}.jpg def rename_file(old, new): 执行重命名 # 使用 os.rename()稍后介绍 pass # 主流程 files get_files(./photos) for file in files: if is_image(file): new_name generate_new_name(file) rename_file(file, new_name)即使你还不清楚os.listdir()和os.rename()的具体写法这个框架也已经把任务分解成了可实现的步骤。这就是函数的价值先搭骨架再填血肉。5. 文件操作和模块导入让 Python 能读写外部数据Python 内置了os模块来处理文件和目录。模块可以理解为“工具箱”import os就是把这个工具箱引入到当前脚本。5.1 列出目录下的所有文件import os # 获取当前目录下的所有文件和文件夹 all_items os.listdir(.) # . 表示当前目录 # 过滤出文件忽略文件夹 files [item for item in all_items if os.path.isfile(item)]这里用到了列表推导式[item for item in all_items if os.path.isfile(item)]它是一种简洁的列表创建方式。读作“对于 all_items 中的每个 item如果它是文件就放到新列表里”。如果觉得这种写法暂时难以理解可以用传统的 for 循环代替files [] for item in all_items: if os.path.isfile(item): files.append(item)两种写法结果相同列表推导式更简洁但初学者可以先从 for 循环开始。5.2 执行重命名# 重命名文件 os.rename(旧文件名.jpg, 新文件名.jpg)需要注意的是如果新文件名已存在os.rename()会覆盖已有文件。在实际脚本中最好先检查新文件名是否冲突。5.3 处理文件路径的最佳实践直接拼接字符串构造路径如文件夹/ 文件名在 Windows 和 macOS/Linux 上可能不兼容因为路径分隔符不同\vs/。推荐使用os.path.join()import os folder photos filename IMG_001.jpg full_path os.path.join(folder, filename) # 输出 photos/IMG_001.jpg 或 photos\IMG_001.jpg这样能自动适应操作系统。5.4 完整的重命名脚本结合前面所有概念我们可以写出一个完整的重命名脚本import os def extract_number(filename): 从文件名中提取编号 parts filename.split(_) if len(parts) 1: number_part parts[1].split(.)[0] return number_part else: return None def main(): # 设置图片目录 image_dir ./photos # 获取目录下所有项目 all_items os.listdir(image_dir) for item in all_items: item_path os.path.join(image_dir, item) # 只处理文件忽略文件夹 if not os.path.isfile(item_path): continue # 只处理图片文件 if item.lower().endswith((.jpg, .png, .gif)): number extract_number(item) if number is not None: new_name f旅行_{number}.jpg new_path os.path.join(image_dir, new_name) # 执行重命名 os.rename(item_path, new_path) print(f重命名: {item} - {new_name}) else: print(f跳过文件名格式不符的文件: {item}) else: print(f跳过非图片文件: {item}) if __name__ __main__: main()这个脚本已经具备实际可用性。你可以新建一个photos文件夹放几张测试图片运行脚本看效果。6. 错误处理与调试让脚本更健壮上面的脚本在理想情况下能工作但如果遇到意外情况比如文件被占用、权限不足、文件名格式不符合预期就会崩溃。好的脚本应该能处理异常给出友好提示。6.1 使用 try-except 捕获异常try: os.rename(old_path, new_path) print(f成功重命名: {old_path} - {new_path}) except Exception as e: print(f重命名失败: {e})try块里的代码会被尝试执行如果发生错误则跳转到except块不会导致整个脚本崩溃。Exception as e会捕获所有类型的错误并把错误信息存入变量e。6.2 常见的错误类型你可以针对特定错误类型分别处理try: os.rename(old_path, new_path) except FileNotFoundError: print(文件不存在) except PermissionError: print(没有权限修改文件) except Exception as e: print(f其他错误: {e})这样能更精确地定位问题。6.3 添加日志记录对于批量任务建议把操作结果写入日志文件方便后续检查import datetime def write_log(message): with open(rename_log.txt, a, encodingutf-8) as f: timestamp datetime.datetime.now().strftime(%Y-%m-%d %H:%M:%S) f.write(f[{timestamp}] {message}\n) # 在重命名成功或失败时调用 write_log(f重命名: {old_path} - {new_path})with open(...) as f是文件操作的推荐写法它能自动处理文件的打开和关闭。a表示追加模式append不会覆盖原有日志。7. 从脚本到工具下一步可以做什么当你的脚本能稳定运行后可以考虑把它变得更通用、更易用7.1 接受用户输入目前图片目录是硬编码的image_dir ./photos。可以让用户运行时指定目录import sys if len(sys.argv) 1: image_dir sys.argv[1] else: image_dir input(请输入图片目录路径: )sys.argv是命令行参数列表sys.argv[0]是脚本名sys.argv[1]是第一个参数。这样用户就可以用python rename_script.py /path/to/photos的方式运行。7.2 添加配置选项比如让用户自定义新文件名的前缀prefix input(请输入新文件名前缀默认为旅行: ) or 旅行 new_name f{prefix}_{number}.jpg7.3 打包成可执行文件使用 PyInstaller 可以把 Python 脚本打包成独立的.exeWindows或可执行文件macOS/Linux这样即使没有安装 Python 的电脑也能运行pip install pyinstaller pyinstaller --onefile rename_script.py生成的执行文件在dist文件夹内。学习 Python 基础的最佳方式不是按部就班地刷教程而是选择一个真实的小项目在实现过程中遇到什么问题就学什么。每解决一个实际问题你对该知识点的理解就会加深一层。这个重命名脚本虽然简单但已经覆盖了变量、循环、条件、函数、文件操作、错误处理等核心概念。下次当你需要处理其他自动化任务时可以以此为基础逐步扩展你的 Python 工具箱。
Python自动化入门:从实际问题出发掌握核心语法
发布时间:2026/7/15 1:43:55
你有没有遇到过这样的情况刚装好 Python打开教程第一页就教你写print(Hello, World!)屏幕确实输出了那行字但心里却在嘀咕“然后呢这能用来做什么” 或者你跟着教程一步步敲代码变量、循环、函数都学了一遍但一到自己动手写个小工具就不知道从哪里开始总觉得知识点是散的串不起来。这其实不是你的问题。很多 Python 入门材料包括一些经典书籍的早期章节容易陷入两种极端要么太零散像字典一样罗列语法要么太抽象直接抛概念缺少“为什么需要这个”的场景解释。结果就是你知道了if...else的写法却不清楚什么时候该用if什么时候该把判断逻辑封装成函数你记住了for循环能遍历列表但遇到需要处理一批文件时还是不知道如何组合os.listdir()和循环。真正有效的入门不是从“语法”开始而是从“意图”开始——先明确你想用 Python 解决什么问题再倒推需要哪些语法和工具。这篇文章会换一个顺序带你重新走一遍 Python 基础。我们不按传统章节学而是围绕“如何用 Python 自动化处理日常任务”这个目标把变量、循环、函数、文件操作等核心概念串成一条可操作的路径。目标很简单学完这一篇你不仅能看懂代码更能写出一个能实际运行、解决具体问题的小脚本。1. 别急着写print(Hello, World!)先想清楚你要解决什么问题很多教程一上来就教环境安装、配置编辑器、写第一行代码。这些步骤当然必要但如果缺乏一个明确的目标很容易变成机械操作。我的建议是在安装 Python 之前先花几分钟想一个你想自动化的小任务。比如你经常需要把一批图片的文件名从 “IMG_001.jpg” 改成 “旅行_001.jpg”你每周都要从 Excel 里复制数据整理成周报格式你想监控某个网页的价格变化低于某个数值时提醒自己。哪怕这个任务看起来很简单甚至你觉得“可能用不上 Python”它也会成为你学习过程中的“锚点”。每学一个新概念你都可以问自己“这个功能能帮我解决目标里的哪一步”1.1 环境准备选对工具避免初期挫败Python 的安装过程本身不复杂但从长期使用角度有几点容易踩坑Python 版本选择如果你用的是 Windows 或 macOS直接从官网下载 Python 3.12 的安装包即可。注意勾选“Add Python to PATH”选项这是很多新手卡住的第一步。编辑器选择初期不建议折腾复杂的 IDE。VS Code 或 PyCharm Community 版都是不错的选择它们自带语法高亮、代码提示和调试功能。关键是一开始保持简单打开编辑器新建一个.py文件就能开始写代码。验证安装打开终端Windows 是 CMD 或 PowerShellmacOS/Linux 是 Terminal输入python --version。如果显示 Python 3.x.x说明安装成功。如果报错“命令未找到”说明 PATH 没配置好需要重新安装或手动添加环境变量。注意不要在这个阶段过度优化环境。有些人会花半天时间配置主题、安装几十个插件结果代码一行没写。环境够用就好重点是尽快开始写第一段有意义的代码。1.2 从“任务”反推“需要学什么”假设你选择的锚点任务是“批量重命名图片”。完成它需要几步列出指定文件夹下的所有文件。判断每个文件是不是图片扩展名是 .jpg、.png 等。生成新文件名。执行重命名操作。这四步分别对应 Python 的几个核心概念文件操作、条件判断、循环、字符串处理。你看我们还没写任何代码但已经知道要学什么了而且每个知识点都有明确的应用场景。这种“以终为始”的学习路径比孤立地背诵语法有效得多。2. 变量和数据类型不是用来记的而是用来存中间结果的传统教程会先讲“变量是存储数据的容器”然后列出整数、浮点数、字符串、列表、字典等类型。这种讲法没错但容易让人误以为“必须先背下所有类型才能开始写代码”。其实初期你只需要掌握三种最常用的类型字符串、列表、字典。其他的用到时再查。2.1 字符串处理文本的基础字符串就是你看到的文本比如Hello、批量重命名。它的核心操作是拼接、切片和替换。例如在重命名任务中旧文件名是IMG_001.jpg新文件名可能是旅行_ 001 .jpg。这里就用到了字符串拼接。# 字符串拼接的几种方式 old_name IMG_001 extension .jpg new_name 旅行_ old_name.split(_)[1] extension # 方式1用 拼接 new_name2 f旅行_{old_name.split(_)[1]}{extension} # 方式2用 f-string推荐更直观注意我在这里故意引入了一个还没详细讲的方法split(_)。这是因为真实编码时你经常需要边查边用。重要的是理解意图我们想从IMG_001里提取001而split(_)能按分隔符切割字符串返回一个列表[IMG, 001]然后取第二个元素。2.2 列表用来存一组数据列表就是一系列数据的集合比如[apple, banana, orange]。在批量任务中你会用列表存储所有待处理的文件名。它的核心操作是遍历循环和增删改查。# 列表示例 files [IMG_001.jpg, IMG_002.jpg, IMG_003.jpg] # 如何遍历稍后在循环部分展开2.3 字典用来存键值对字典适合存储有结构的数据。比如你想记录每个文件的新旧名称对应关系可以用字典{IMG_001.jpg: 旅行_001.jpg, IMG_002.jpg: 旅行_002.jpg}。初期如果任务简单可以暂不用字典但知道它的存在很重要。2.4 变量命名的实战原则语法层面变量名不能以数字开头不能包含空格。但更重要的是实战原则用英文命名即使你的项目是中文的。old_name比旧文件名更通用。名字要能看出用途。file_list比a好懂。不要用l小写L、O大写O这类易混淆的字符。变量学习的重点不是记忆所有类型而是理解“什么时候该定义一个变量”。基本原则是如果某个数据后面会用到两次或以上就应该存成变量。比如文件扩展名.jpg在重命名时会出现多次那就应该定义extension .jpg而不是每次硬编码。3. 循环和条件判断把单次操作变成批量处理这是 Python 自动化的核心。循环让你能重复执行一段代码条件判断让你能根据不同情况执行不同操作。3.1 for 循环处理已知数量的重复任务在批量重命名中我们已知要处理文件夹下的所有文件这时用for循环最合适。# 假设我们已经有一个文件列表 files [IMG_001.jpg, IMG_002.jpg, IMG_003.jpg] for file in files: # 这里的 file 会依次等于列表中的每个文件名 print(当前处理文件:, file) # 重命名逻辑会放在这里for file in files:这行代码的意思是对于files列表中的每一个元素临时把它赋值给变量file然后执行缩进块里的代码。缩进是 Python 语法的一部分一般用 4 个空格表示“这些代码属于循环体”。3.2 if 条件判断只处理符合条件的文件如果文件夹里混入了非图片文件比如.txt或.docx我们只想处理图片。这时需要条件判断。for file in files: if file.endswith(.jpg) or file.endswith(.png): print(这是图片文件开始处理:, file) # 重命名逻辑 else: print(跳过非图片文件:, file)if后面跟一个条件表达式值为True时执行缩进块False时跳过或执行else块。常见的条件判断包括字符串判断endswith()以...结尾、startswith()以...开头、in包含。数值比较、、等于、!不等于。逻辑组合and与、or或、not非。3.3 循环与判断的组合使用实际任务中循环和判断总是结合在一起的。批量重命名的核心逻辑就是for file in files: if 是图片文件(file): 新文件名 生成新文件名(file) 执行重命名(file, 新文件名)你看我们甚至可以用中文伪代码先描述逻辑再逐步替换成具体语法。这种方法能帮你聚焦在流程上而不是一开始就陷入语法细节。4. 函数把复杂操作封装成简单指令当代码超过 20 行或者同一段逻辑出现两次以上你就应该考虑用函数了。函数的作用不是“让代码看起来高级”而是“减少重复提高可读性降低出错概率”。4.1 为什么要用函数一个真实场景假设在重命名任务中我们需要从IMG_001.jpg提取编号001。一开始你可能直接写number file.split(_)[1].split(.)[0] # 提取 001但如果有多个地方需要提取编号每次写这么长一串容易出错。而且如果文件名格式变成Photo-001.jpg你得修改所有出现这段代码的地方。如果用函数封装def extract_number(filename): 从文件名中提取编号 # 假设文件名格式为 前缀_编号.扩展名 parts filename.split(_) if len(parts) 1: number_part parts[1].split(.)[0] return number_part else: return None # 如果格式不符合预期返回 None # 使用函数 number extract_number(IMG_001.jpg)这样主流程变得清晰提取逻辑被隔离在一处。将来文件名格式变化只需修改函数内部。4.2 定义函数的实用原则函数名应该是一个动词短语说明它做什么比如extract_number、rename_file。函数长度最好控制在 20 行以内。如果太长说明它可能在做多件事应该拆分。使用文档字符串函数说明简要描述函数用途和参数。尽量让函数返回一个值而不是直接修改外部变量。这有利于测试和复用。4.3 函数在批量任务中的角色在完整的重命名脚本中函数可以把流程分解成几个独立部分def get_files(directory): 获取目录下所有文件 # 使用 os.listdir()稍后介绍 pass def is_image(file): 判断是否为图片文件 return file.endswith((.jpg, .png, .gif)) def generate_new_name(file): 生成新文件名 number extract_number(file) return f旅行_{number}.jpg def rename_file(old, new): 执行重命名 # 使用 os.rename()稍后介绍 pass # 主流程 files get_files(./photos) for file in files: if is_image(file): new_name generate_new_name(file) rename_file(file, new_name)即使你还不清楚os.listdir()和os.rename()的具体写法这个框架也已经把任务分解成了可实现的步骤。这就是函数的价值先搭骨架再填血肉。5. 文件操作和模块导入让 Python 能读写外部数据Python 内置了os模块来处理文件和目录。模块可以理解为“工具箱”import os就是把这个工具箱引入到当前脚本。5.1 列出目录下的所有文件import os # 获取当前目录下的所有文件和文件夹 all_items os.listdir(.) # . 表示当前目录 # 过滤出文件忽略文件夹 files [item for item in all_items if os.path.isfile(item)]这里用到了列表推导式[item for item in all_items if os.path.isfile(item)]它是一种简洁的列表创建方式。读作“对于 all_items 中的每个 item如果它是文件就放到新列表里”。如果觉得这种写法暂时难以理解可以用传统的 for 循环代替files [] for item in all_items: if os.path.isfile(item): files.append(item)两种写法结果相同列表推导式更简洁但初学者可以先从 for 循环开始。5.2 执行重命名# 重命名文件 os.rename(旧文件名.jpg, 新文件名.jpg)需要注意的是如果新文件名已存在os.rename()会覆盖已有文件。在实际脚本中最好先检查新文件名是否冲突。5.3 处理文件路径的最佳实践直接拼接字符串构造路径如文件夹/ 文件名在 Windows 和 macOS/Linux 上可能不兼容因为路径分隔符不同\vs/。推荐使用os.path.join()import os folder photos filename IMG_001.jpg full_path os.path.join(folder, filename) # 输出 photos/IMG_001.jpg 或 photos\IMG_001.jpg这样能自动适应操作系统。5.4 完整的重命名脚本结合前面所有概念我们可以写出一个完整的重命名脚本import os def extract_number(filename): 从文件名中提取编号 parts filename.split(_) if len(parts) 1: number_part parts[1].split(.)[0] return number_part else: return None def main(): # 设置图片目录 image_dir ./photos # 获取目录下所有项目 all_items os.listdir(image_dir) for item in all_items: item_path os.path.join(image_dir, item) # 只处理文件忽略文件夹 if not os.path.isfile(item_path): continue # 只处理图片文件 if item.lower().endswith((.jpg, .png, .gif)): number extract_number(item) if number is not None: new_name f旅行_{number}.jpg new_path os.path.join(image_dir, new_name) # 执行重命名 os.rename(item_path, new_path) print(f重命名: {item} - {new_name}) else: print(f跳过文件名格式不符的文件: {item}) else: print(f跳过非图片文件: {item}) if __name__ __main__: main()这个脚本已经具备实际可用性。你可以新建一个photos文件夹放几张测试图片运行脚本看效果。6. 错误处理与调试让脚本更健壮上面的脚本在理想情况下能工作但如果遇到意外情况比如文件被占用、权限不足、文件名格式不符合预期就会崩溃。好的脚本应该能处理异常给出友好提示。6.1 使用 try-except 捕获异常try: os.rename(old_path, new_path) print(f成功重命名: {old_path} - {new_path}) except Exception as e: print(f重命名失败: {e})try块里的代码会被尝试执行如果发生错误则跳转到except块不会导致整个脚本崩溃。Exception as e会捕获所有类型的错误并把错误信息存入变量e。6.2 常见的错误类型你可以针对特定错误类型分别处理try: os.rename(old_path, new_path) except FileNotFoundError: print(文件不存在) except PermissionError: print(没有权限修改文件) except Exception as e: print(f其他错误: {e})这样能更精确地定位问题。6.3 添加日志记录对于批量任务建议把操作结果写入日志文件方便后续检查import datetime def write_log(message): with open(rename_log.txt, a, encodingutf-8) as f: timestamp datetime.datetime.now().strftime(%Y-%m-%d %H:%M:%S) f.write(f[{timestamp}] {message}\n) # 在重命名成功或失败时调用 write_log(f重命名: {old_path} - {new_path})with open(...) as f是文件操作的推荐写法它能自动处理文件的打开和关闭。a表示追加模式append不会覆盖原有日志。7. 从脚本到工具下一步可以做什么当你的脚本能稳定运行后可以考虑把它变得更通用、更易用7.1 接受用户输入目前图片目录是硬编码的image_dir ./photos。可以让用户运行时指定目录import sys if len(sys.argv) 1: image_dir sys.argv[1] else: image_dir input(请输入图片目录路径: )sys.argv是命令行参数列表sys.argv[0]是脚本名sys.argv[1]是第一个参数。这样用户就可以用python rename_script.py /path/to/photos的方式运行。7.2 添加配置选项比如让用户自定义新文件名的前缀prefix input(请输入新文件名前缀默认为旅行: ) or 旅行 new_name f{prefix}_{number}.jpg7.3 打包成可执行文件使用 PyInstaller 可以把 Python 脚本打包成独立的.exeWindows或可执行文件macOS/Linux这样即使没有安装 Python 的电脑也能运行pip install pyinstaller pyinstaller --onefile rename_script.py生成的执行文件在dist文件夹内。学习 Python 基础的最佳方式不是按部就班地刷教程而是选择一个真实的小项目在实现过程中遇到什么问题就学什么。每解决一个实际问题你对该知识点的理解就会加深一层。这个重命名脚本虽然简单但已经覆盖了变量、循环、条件、函数、文件操作、错误处理等核心概念。下次当你需要处理其他自动化任务时可以以此为基础逐步扩展你的 Python 工具箱。