在Python中按特定格式重命名子文件夹中的文件

时间:2018-11-30 09:46:29

标签: python filenames

我有一个包含很多子文件夹的文件夹。每个子文件夹都有不同类型的图像文件。我正在尝试通过特定格式重命名这些文件。数据如下:

folder
        \ sub1\file0.jpg
        \ sub1\file1.jpg
        \ sub1\file2.png
        .
        .
        .
        \ sub2\xxx.png
        \ sub2\yyy.jpg
        \ sub2\zzz.png
        .
        .
        .

所需的输出:

folder
        \ sub1\file-01.jpg
        \ sub1\file-02.jpg
        \ sub1\file-03.png
        .
        .
        .
        \ sub2\file-01.png
        \ sub2\file-02.jpg
        \ sub2\file-03.png
        .
        .
        .

到目前为止,我已经尝试了以下代码,但无法解决问题。

import os

dir_name = "D:/folder"     
for root, dirs, files in os.walk(dir_name, topdown=False):
    for file in files:
        file_name = os.path.splitext(file)[0]#file name no ext
        extension = os.path.splitext(file)[1]
        dir_name = os.path.basename(root)
        os.rename(root+"/"+file, root+"/"+"file"+"s%"+extension)

2 个答案:

答案 0 :(得分:2)

这是使用enumerate的一种方法。

演示:

import os

dir_name = "D:/folder"      
for root, dirs, files in os.walk(dir_name, topdown=False):
    for num, file in enumerate(files, 1):   #enumerate to get number
        src =  os.path.join(root, file)
        file_s = os.path.splitext(file)
        dest = os.path.join(root, "{0}-{1}.{2}".format(file_s[0], str(num).rjust(2, "0"), file_s[1]))   #Form destination file name
        os.rename(src, dest)   #Rename. 

答案 1 :(得分:1)

  

os.rename(root+"/"+file, root+"/"+"file"+"s%"+extension)

您使用的%s字符串格式语法错误(我假设您打算这样做)。进一步了解here。提醒一下,您需要插入一个实际变量来代替%s。我相信您可以弄清楚如何实现。 (另一个答案也给出了可能的解决方案)

实际上,我建议同时为rootfileextension使用字符串格式-在您这样做时,请考虑使用f-strings而不是%s语法。