2022年 11月 6日

Python实现批量重命名

最近在网络上下载了一部漫画,漫画是图片形式的,下载下来后才发现每一张漫画图片的文件名都是没有规律且又长又复杂的,想要把它们改成按数字递增规律的,一个一个去改文件名工作量太大,浪费太多时间,于是心想用Python写一个脚本实现批量重命名的操作。

文件存放在 D:/temp 路径下,文件名类似上图,图片很多,这里仅用少部分做演示

文件存放在 D:/temp 路径下,文件名类似上图,图片很多,这里仅用少部分做演示

为了完成脚本,查阅了Python有关文件名的库,发现需要用到Python标准库中的os库。

一、重命名函数

Python中有一个给文件重命名的函数:

os.rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)

    该函数就是将文件名从src改为dst,后两个参数用不到先忽略。

    二、获取文件名函数

    我们还需要获取原文件名,也就是src。

    os库中还有一个函数可以获取文件名:

    os.listdir(path='.')

      该函数可以列出某个目录下的所有文件名

      所有我们用一个for循环可以获取每一个文件名

      for file in os.listdir(r'D:/temp'):
          print(file)
      • 1

      输出:

      %80%90%E4%B8%89%E7%A7%8B%E4.jpg

      %AE%E5%8B%92%E6%9E%81%E7%A6.jpg

      %E6%B3%B0%E6%99%AE%E5%8B%92.jpg

      %E8%A3%85%E5%85%E6%B3%B0%E6.jpg

      三、路径合并函数

      由于图片文件和Python脚本并不在同一文件夹下,所以此时的src和dst并不是简单的文件名,而是由路径+文件名组成。例如,文件%80%90%E4%B8%89%E7%A7%8B%E4.jpg其实是 E:/temp/%80%90%E4%B8%89%E7%A7%8B%E4.jpg,所以我们需要将两部分组合起来。

      Python的os库中有一个函数:

      os.path.join(path, *paths)

        该函数合理地拼接一个或多个路径部分,返回值是 path 和 *paths 所有值的连接。

        上面的例子就可以像下面这样写:

        os.path.join(r'D:/temp','%80%90%E4%B8%89%E7%A7%8B%E4.jpg')

          批量重命名脚本

          于是利用上面这些知识可以写出下面这个完整的脚本(GitHub-Yajanan/FilesPathRename):

          # FilesBatchRename.py
          # 导入os库
          import os
          
          # 图片存放的路径
          path = r"D:/temp"
          
          # 遍历更改文件名
          num = 1
          for file in os.listdir(path):
              os.rename(os.path.join(path,file),os.path.join(path,str(num))+".jpg")
              num = num + 1
          • 1
          • 2
          • 3
          • 4
          • 5
          • 6
          • 7
          • 8
          • 9
          • 10
          • 11

          运行一下,可以看到结果如下:

          满足了我们的需求

          满足了我们的需求。

          (正文完)

          本文由博客群发一文多发等运营工具平台 OpenWrite 发布