Python 批量修改文件名
1. 引言
在我们日常的工作中,经常会遇到需要批量修改文件名的情况。比如,需要给一批照片添加日期前缀,或者将一系列文件按照特定规则重命名等等。手动一个个修改文件名非常繁琐,这时候就需要借助 Python 的能力来进行自动化处理。
本文将详细介绍如何使用 Python 批量修改文件名,包括获取文件列表、修改文件名和运行示例代码。
2. 获取文件列表
首先,我们需要获取需要修改的文件列表。Python 的 os
模块提供了一些获取文件列表的方法,例如 os.listdir()
和 os.walk()
。
2.1 使用 os.listdir()
os.listdir()
方法可以返回指定目录下的所有文件和文件夹的列表。我们可以通过循环遍历这个列表,获取所有文件的绝对路径。
import os
folder_path = '/path/to/folder'
file_list = os.listdir(folder_path)
for file_name in file_list:
file_path = os.path.join(folder_path, file_name)
if os.path.isfile(file_path):
print(file_path)
上述代码中,folder_path
是需要修改文件名的文件夹路径,os.listdir()
返回的列表中包含了该文件夹下所有文件和文件夹的名称。我们通过循环迭代列表,使用 os.path.join()
函数将文件夹路径和文件名组合成绝对路径,然后通过 os.path.isfile()
判断是否是文件,最后打印文件的绝对路径。
2.2 使用 os.walk()
os.walk()
方法可以遍历一个目录下的所有文件和文件夹,包括子目录。它返回一个生成器对象,每次迭代都会返回一个三元组 (dirpath, dirnames, filenames)
。
import os
folder_path = '/path/to/folder'
for dirpath, dirnames, filenames in os.walk(folder_path):
for file_name in filenames:
file_path = os.path.join(dirpath, file_name)
print(file_path)
上述代码中,dirpath
是当前所处目录的路径,dirnames
是当前目录下的所有子目录的名称列表,filenames
是当前目录下的所有文件的名称列表。我们通过嵌套的循环迭代 filenames
列表,使用 os.path.join()
将文件夹路径和文件名组合成绝对路径,然后打印文件的绝对路径。
3. 修改文件名
获取到文件列表后,我们可以根据需求进行文件名的修改。Python 的 os
模块也提供了一些文件名修改的方法,例如 os.rename()
。
3.1 使用 os.rename()
os.rename()
方法可以将文件或文件夹重命名。我们可以通过循环遍历文件列表,对每个文件进行重命名操作。
import os
folder_path = '/path/to/folder'
file_list = os.listdir(folder_path)
for file_name in file_list:
old_file_path = os.path.join(folder_path, file_name)
if os.path.isfile(old_file_path):
new_file_name = "new_" + file_name # 新的文件名规则
new_file_path = os.path.join(folder_path, new_file_name)
os.rename(old_file_path, new_file_path)
上述代码中,我们在循环的过程中给每个文件名添加了前缀 "new_"
,并将新的文件名规则赋值给 new_file_name
变量。然后,使用 os.rename()
方法将旧的文件路径 old_file_path
改为新的文件路径 new_file_path
。
4. 运行示例代码
为了更好地理解批量修改文件名的过程,我们来运行一个简单的示例代码。假设我们有一个文件夹,其中包含了一些照片文件,我们需要给这些照片文件添加日期前缀。
4.1 示例代码
import os
import datetime
folder_path = '/path/to/photos'
file_list = os.listdir(folder_path)
for file_name in file_list:
file_path = os.path.join(folder_path, file_name)
if os.path.isfile(file_path):
file_datetime = datetime.datetime.fromtimestamp(os.path.getmtime(file_path))
new_file_name = file_datetime.strftime("%Y%m%d_") + file_name
new_file_path = os.path.join(folder_path, new_file_name)
os.rename(file_path, new_file_path)
上述代码中,我们使用了 datetime
模块来获取文件的修改时间。通过 os.path.getmtime()
方法获取文件的修改时间戳,并使用 datetime.datetime.fromtimestamp()
方法将其转换为可读的日期时间格式。然后,我们使用 strftime()
方法将日期时间格式化为我们想要的形式,比如 "%Y%m%d_"
表示年月日的格式。
4.2 示例代码运行结果
运行示例代码后,照片文件的文件名将被修改为日期前缀的形式。例如,原始文件名为 "photo.jpg"
,修改后的文件名将为 "20220101_photo.jpg"
。
5. 总结
通过使用 Python,我们可以轻松实现批量修改文件名的自动化过程。首先,我们需要获取文件列表,可以使用 os.listdir()
或 os.walk()
方法;然后,根据具体需求进行文件名的修改,可以使用 os.rename()
方法;最后,我们可以运行示例代码来加深理解。