详解Python 重命名目录中的所有文件名

  • Post category:Python

以Python 3为例,重命名目录中的所有文件名可以有多种方法实现,以下是其中一种比较常用的方法及其详细步骤。

1. 代码实现步骤

1.1 导入模块

首先,需要导入Python标准库中的os模块,该模块提供了访问操作系统功能的接口,其中包括了重命名文件的函数。

import os

1.2 获取文件列表

使用os.listdir()函数获取目标文件夹中的所有文件名,并保存到一个列表中。

path = r'/path/to/folder' # 目标文件夹路径
files = os.listdir(path) # 获取目标文件夹中的所有文件名

1.3 遍历文件列表并执行重命名

遍历文件列表,并通过os.rename()函数重命名每个文件名。

for filename in files:
    if not os.path.isdir(filename): # 排除文件夹名
        newname = filename.replace('oldname', 'newname') # 根据需求生成新文件名
        os.rename(filename, newname) # 执行重命名操作

上述代码中,replace()函数用于在文件名中查找指定的字符串oldname,并用新字符串newname替换它,然后将新文件名传递给os.rename()函数进行重命名操作。

1.4 测试代码

为了确保代码能够正确执行,需要添加一些测试代码进行验证,比如输出重命名后的文件名。

for filename in os.listdir(path):
    print(filename)

2. 示例说明

2.1 重命名所有txt文件

假设我们有一个文件夹/home/user/documents,其中包含一些txt文件,我们需要将其中所有文件名中的日期格式从yyyymmdd改为yyyy-mm-dd的形式。通过如下代码实现:

import os

path = r'/home/user/documents'
files = os.listdir(path)

for filename in files:
    if filename.endswith('.txt'): # 仅处理.txt文件
        newname = filename[:4] + '-' + filename[4:6] + '-' + filename[6:8] + filename[8:]
        os.rename(os.path.join(path, filename), os.path.join(path, newname))

上述代码中,首先使用os.path.join()函数将文件夹路径和文件名合并成完整的路径,然后将新文件名传递给os.rename()函数进行重命名操作。

2.2 复制并重命名图片文件

现在假设我们有一个文件夹/home/user/photos,其中包含一些jpg和png格式的图片文件,我们希望将其中所有图片文件复制到另一个文件夹,并重命名为“原文件名_日期.jpg/png”的形式。通过如下代码实现:

import os
import shutil
from datetime import date

src_path = r'/home/user/photos'
dst_path = r'/home/user/new_photos'

files = os.listdir(src_path)

for filename in files:
    if filename.endswith('.jpg') or filename.endswith('.png'): # 只处理jpg和png文件
        dt = str(date.today()) # 获取当天日期,格式为yyyy-mm-dd
        newname = filename[:-4] + '_' + dt + filename[-4:] # 生成新文件名

        src_file = os.path.join(src_path, filename)
        dst_file = os.path.join(dst_path, newname)

        shutil.copyfile(src_file, dst_file) # 复制文件

上述代码中,使用了Python标准库中的shutil模块,它提供了一些高级的文件操作函数,比如上述代码中的copyfile()函数即为其中之一,用于复制文件。同时,还使用datetime库中的date.today()函数获取当天日期,并将其转换为字符串以便用于重命名文件。