下午好。我有 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
path
不以/
结尾,因此,例如,如果有一个名为"example.jpg"的文件,则my_source
"D:/dataexample.jpg"
。您应该考虑改用os.path.join
。
此外,my_dest = my_dest
不会执行任何操作,当您指定源的完整路径和目标的文件名时,os.rename
将出错。如果您只打算重命名文件而不移动文件并且它位于当前工作目录中,则应为两者指定完整路径或仅指定两者的文件名。
您还应该研究enumerate
和字符串格式。
您可以使用os.path.splitext获取文件名 + 扩展名,并使用os.path.dirname获取文件名目录。这可能有助于您构建目标。使用os.path.join合并目标的目录和文件名
Harmon758 的回答已经指出了您可以做的所有错误和改进,所以我只是将它们放在一起。您应该:
-
使用 os.path.join 创建文件名,而不关心尾随的"/",
使用 枚举而不是使用额外的计数器变量对文件进行计数,
使用字符串格式来实现所描述的命名,而不是使所有名称都以零开头。在下面的代码中,它生成名称,左边用零填充,长度为 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)