按 Python 中的特定格式重命名子文件夹中的文件
Rename files in subfolders by specific format in Python
我有一个包含很多子文件夹的文件夹。每个子文件夹都有不同类型的图像文件。我正在尝试按特定格式重命名这些文件。数据如下所示:
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)
这是一种使用 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.
os.rename(root+"/"+file, root+"/"+"file"+"s%"+extension)
您使用的 %s
字符串格式化语法错误(我假设这就是您打算做的)。阅读更多相关信息 here。提醒一下,您需要插入一个实际变量来代替 %s
。我相信你能弄清楚如何实现它。 (另一个答案也给出了可能的解决方案)
事实上,我建议对 root
、file
和 extension
也使用字符串格式 - 当您这样做时,请考虑使用 f-strings 而不是 %s
语法。
我有一个包含很多子文件夹的文件夹。每个子文件夹都有不同类型的图像文件。我正在尝试按特定格式重命名这些文件。数据如下所示:
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)
这是一种使用 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.
os.rename(root+"/"+file, root+"/"+"file"+"s%"+extension)
您使用的 %s
字符串格式化语法错误(我假设这就是您打算做的)。阅读更多相关信息 here。提醒一下,您需要插入一个实际变量来代替 %s
。我相信你能弄清楚如何实现它。 (另一个答案也给出了可能的解决方案)
事实上,我建议对 root
、file
和 extension
也使用字符串格式 - 当您这样做时,请考虑使用 f-strings 而不是 %s
语法。