在日常工作中,我们常常会遇到需要批量重命名文件的场景,比如整理下载的图片、批量修改文件后缀,或者给一堆文件加上统一的前缀/后缀。这些事情如果手动操作,既枯燥又费时。不过,别担心!今天我会带大家用 Python 来轻松搞定批量文件重命名,让你从繁琐的操作中解放双手。
通过这篇文章,你将学会如何用 Python 操作文件系统,批量读取、修改文件名,并掌握一些好用的小技巧。别担心,咱们从零开始,每一步都讲清楚。准备好了吗?走起!
为什么选择 Python 来重命名文件?
Python 的 os 和 shutil 模块让我们能够轻松操作文件和目录。这些模块的功能就像一把瑞士军刀,既简单又强大。以下是 Python 用来批量重命名文件的一些优势:
简单易学:Python 的语法非常贴近自然语言,即使是初学者也能快速上手。
效率高:用几行代码就能完成上百个文件的重命名操作。
可扩展性强:可以根据需求定制复杂的批处理逻辑,比如按日期重命名文件、过滤特定类型文件等。
接下来,我们从基础开始,一步步实现文件批量重命名。
1. 初识 os 模块:Python 的文件操作利器
在 Python 中,os 模块 是处理文件和目录的核心工具。我们需要用它来列出文件、修改文件名等操作。先看一个简单的例子:
import os
# 列出当前目录下的所有文件和文件夹
files = os.listdir(".") # "." 表示当前目录
print("当前目录的文件有:")
print(files)
运行解释:
os.listdir()函数会返回指定目录下的所有文件和文件夹的列表。"."表示当前目录,你也可以换成其他路径,比如"C:/Users/YourName/Documents"。
小练习:运行上面的代码,看看你当前目录下有哪些文件?
2. 批量重命名文件的基础:os.rename()
批量重命名的核心函数是 os.rename(),它允许我们将文件从一个名字改成另一个名字。下面是一个简单的例子:
import os
# 把文件 "old_name.txt" 改成 "new_name.txt"
os.rename("old_name.txt", "new_name.txt")
print("文件重命名完成!")
运行解释:
os.rename()接受两个参数:第一个是旧名字,第二个是新名字。如果文件名不存在,或者新名字已被占用,就会报错。
3. 实战:批量给文件添加前缀
假设我们有一组图片,名字分别是 1.jpg, 2.jpg, 3.jpg,现在我们想给它们统一加上前缀 photo_,变成 photo_1.jpg, photo_2.jpg, photo_3.jpg。代码如下:
import os
# 获取当前目录下的所有文件
files = os.listdir(".")
print("重命名前的文件:", files)
# 遍历文件列表,给每个文件添加前缀
for file in files:
# 跳过文件夹,只处理文件
if os.path.isfile(file):
new_name = "photo_" + file
os.rename(file, new_name)
print(f"已将 {file} 重命名为 {new_name}")
print("所有文件重命名完成!")
运行解释:
os.path.isfile(file)用来判断是否是文件,避免误操作文件夹。循环中,我们给每个文件都加上了前缀
photo_。
小贴士:
运行代码前,请确保你的目录中没有重要的文件,或者先备份一份!
4. 实战升级:批量修改文件后缀名
有时候我们需要批量修改文件的后缀名,比如把一堆 .txt 文件改成 .md 文件。以下是实现代码:
import os
# 获取当前目录下的所有文件
files = os.listdir(".")
print("重命名前的文件:", files)
# 遍历文件列表,修改后缀名
for file in files:
# 只处理 .txt 文件
if file.endswith(".txt"):
new_name = file.replace(".txt", ".md")
os.rename(file, new_name)
print(f"已将 {file} 重命名为 {new_name}")
print("后缀名修改完成!")
运行解释:
file.endswith(".txt")用来检查文件是否以.txt结尾。file.replace(".txt", ".md")将.txt替换为.md。
小贴士:
如果你只想处理某些特定的文件类型,可以用类似的方法筛选。
5. 增强版:按数字顺序重命名
有时我们想把文件按数字顺序排列,比如 photo_1.jpg, photo_2.jpg,但文件名杂乱无章。以下代码可以按文件在目录中的顺序进行编号:
import os
# 获取当前目录下的所有文件
files = os.listdir(".")
print("重命名前的文件:", files)
# 遍历文件列表,按顺序编号重命名
for i, file in enumerate(files):
# 跳过文件夹
if os.path.isfile(file):
# 使用 enumerate() 自动生成编号
new_name = f"file_{i + 1}.jpg" # i 从 0 开始,所以加 1
os.rename(file, new_name)
print(f"已将 {file} 重命名为 {new_name}")
print("文件按序重命名完成!")
运行解释:
enumerate(files)会同时返回索引和文件名,比如(0, "file1.jpg")。f"file_{i + 1}.jpg"使用了 f-string 格式化字符串。
常见错误与解决方法
文件路径问题:
如果文件不在当前目录下,可以用绝对路径,比如os.listdir("C:/path/to/files")。文件名重复:
如果新旧文件名有冲突,os.rename()会报错。可以先检查文件是否已存在,方法如下:if not os.path.exists(new_name):
os.rename(file, new_name)
else:
print(f"文件 {new_name} 已存在,跳过...")权限问题:
在某些系统上(比如 Windows),如果没有权限修改文件名,可以尝试用管理员权限运行脚本。
今天我们学习了如何用 Python 批量重命名文件,包括添加前缀、修改后缀、按顺序编号等操作。希望大家通过动手实践,掌握这些技巧!
练习题:
修改代码,让它只重命名
.jpg文件,并给它们添加后缀_edited。写一个程序,将文件名中的空格替换为下划线(例如
my file.txt->my_file.txt)。修改文件名时,保留原始文件的修改时间(提示:可以用
os.path.getmtime())。

