16|循环与文件目录管理:如何实现文件的批量重命名?

作为产品经理 / 运营,你经常需要做竞品调研,来跟自家产品对比优劣。这时,你就需要下载大量与该类产品相关的图片,并进行整理归类。而归类操作中,必须要走的一步就是对这些图片进行重命名。

还有你在搜集资料时,往往会从网络中下载大量不同格式的文件,比如电子书、视频、音频等,为了方便归纳整理,你也需要对文件进行重命名。

通过例举的这两个场景,你应该发现了,这些需求都是把批量改名和网络功能结合,而且还需要 Mac 和 Windows 系统支持重命名。那怎么来实现批量重命名的操作呢?

如果你还记得上节的内容,肯定会说,使用 PowerShell 就可以了。不过你要是对 PowerShell 相关知识掌握得扎实的话,也会记得我说过,PowerShell 适合在 Windows 平台下独立运行的临时性任务。所以在非 Windows 系统,以及需要和网络下载功能结合的需求上,它就没有 Python 的兼容性好。

那么今天这节,会带你回到 Python,使用 Python 来实现文件的批量重命名。

如何使用 os 库实现文件批量重命名

还是老规矩,我们学习一个新的功能,首先要学习它所需要的 Python 库和函数。

例如,把友商的产品介绍图片,通过网络批量下载后,存放在“/Users/user1/Desktop/pic”文件夹中,这些文件名称长短不一,那希望能从数字 1 开始,为它们批量重命名。

在第 15 节就说了,重命名是一种贴近操作系统层面的操作。因此在 Python 标准库中,我把“文件”和“操作系统”作为关键字,从官方文档中找到了“os”库,os 库中包含了操作系统相关的操作。通过“os”库,你就可以轻松取得三个批量重命名必备操作,那就是目录中的文件名、文件名后缀处理以及文件改名。

那先把批量重命名的代码提供给你,让你更直观地理解运行过程,然后再来分析这三个操作是怎么通过 os 库实现的。

import os
# 保存图片的目录
file_path = "/Users/user1/Desktop/pic"
# 需要批量重命名的扩展名
old_ext = ".jpg"
# 取得指定文件夹下的文件列表
old_names = os.listdir(file_path)
# 新文件名称从1开始
new_name = 1

# 取得所有的文件名
for old_name in old_names:

    # 根据扩展名,判断文件是否需要改名
    if old_name.endswith(old_ext):

        # 完整的文件路径
        old_path = os.path.join(file_path, old_name)

        # 新的文件名
        new_path = os.path.join(file_path, str(new_name)+".JPG")
       
        # 重命名
        os.rename(old_path, new_path)

        # 文件名数字加1
        new_name = int(new_name)+1

# 显示改名后的结果
print(os.listdir(file_path))

这段代码会把"/Users/user1/Desktop/pic"目录中“jpg”扩展名的文件进行重命名,把它们分别命名为“1.jpg”,“2.jpg”,“3.jpg”,以此类推。

那批量改名的这三个操作具体是怎么实现的呢?其实是通过 os 库中的三个函数来实现的,分别是 listdir()、path.join() 、rename()。这是你在这节要掌握的重点,也会着重讲解。

第一个是 listdir() 函数,它的功能是打印指定目录下的文件名称。如果再给这个函数指定一个参数 file_path,那么它会把 file_path 中的所有文件名称以一个列表的类型返回。使用列表类型方便后续迭代,便于进行单个文件改名。

为了只对“.jpg”扩展名的文件改名,我使用了 endswith() 函数对列表进一步筛选,过滤掉不需要改名的文件。

第二个是 <

你可能感兴趣的:(python自动化,python)