【问题标题】:Rename all files in folder with Python使用 Python 重命名文件夹中的所有文件
【发布时间】:2020-05-17 20:40:43
【问题描述】:

下午好。我有 500 张文件名错误的图片 (*.jpg)。我想将所有文件重命名为 01、02 等。我哪里做错了?

i = 0
path="D:/data"
for filename in os.listdir(path):
      my_dest ="0" + str(i) + ".jpg"
      my_source = path + filename
      # rename all the files
      os.rename(my_source, my_dest)
      i += 1

【问题讨论】:

  • 使用os.path.join() 而不是path + filename

标签: python python-3.x rename file-rename


【解决方案1】:

path 不以/ 结尾,例如,如果有一个名为“example.jpg”的文件,my_source 将是"D:/dataexample.jpg"。您应该考虑改用os.path.join

此外,my_dest = my_dest 不执行任何操作,当您为源指定完整路径且仅为目标指定文件名时,os.rename 将出错。如果您只打算重命名文件而不移动它并且它位于当前工作目录中,您应该指定两者的完整路径或仅指定两者的文件名。

您还应该查看enumeratestring formatting

【讨论】:

    【解决方案2】:

    您可以使用os.path.splitext获取文件名+扩展名,使用os.path.dirname获取文件名目录。这可以帮助您构建目标。使用 os.path.join 合并目标的目录和文件名

    【讨论】:

      【解决方案3】:

      Harmon758 的回答已经指出了你可以做的所有错误和改进,所以我只是把它们放在一起。你应该:

      • 使用os.path.join 来创建文件名,而不用关心结尾的'/',

      • 使用enumeration 而不是使用额外的计数器变量来计算文件,

      • 使用string format 来实现您描述的命名,而不是让所有名称都以零开头。在下面的代码中,它会生成名称,用零填充,长度为 3。您可以将其更改为所需的长度(在“>”之后)。

          import os
      
          path="D:/data"
          for itr, filename in enumerate(os.listdir(path)):
              my_source = os.path.join(path, filename)
              my_dest = os.path.join(path, "{:0>3}.jpg".format(itr + 1))
              # Rename all the files
              os.rename(my_source, my_dest)
      

      【讨论】:

        猜你喜欢
        • 2012-08-10
        • 2013-04-24
        • 2018-11-30
        • 2014-08-03
        • 2017-10-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多