Python新手,我的简单脚本获取给定目录并按顺序重命名所有文件,但是它正在删除文件,但是打印显示文件名称已重命名,不知道这里出错的地方。
此外,它以什么顺序检索这些文件?
import os
path = os.path.abspath("D:\Desktop\gp")
i = 0
for file_name in os.listdir(path):
try:
print (file_name + " - " + str(i))
os.rename(os.path.join(path,file_name), str(i))
except WindowsError:
os.remove(str(i))
os.rename(os.path.join(path,file_name), str(i))
i += 1
print(str(i) + " files.")
修改
以下是具有工作代码的解决方案,按创建日期检索目录中的所有文件,并在保留文件扩展名的同时为其分配迭代编号。
import os
def sorted_dir(folder):
def getctime(name):
path = os.path.join(folder, name)
return os.path.getctime(path)
return sorted(os.listdir(path), key=getctime)
path = os.path.abspath("D:\Path\Here")
i = 0
for file_name in sorted_dir(path):
_, ext = os.path.splitext(file_name)
print (file_name + " - " + str(i)+ext)
os.rename(os.path.join(path,file_name), os.path.join(path, str(i) + ext))
i += 1
print(str(i-1) + " files.")
答案 0 :(得分:1)
问题在于您使用源的绝对路径,而是使用目标的相对路径。因此,文件不会被删除,它们只是被移动到当前的工作目录中。
要修复它以便将它们重命名为它们已经存在的同一目录,您可以在源上的目标上执行相同的操作:
os.rename(os.path.join(path,file_name), os.path.join(path, str(i)))
从评论中,您可能希望保留这些文件的扩展名。要做到这一点:
_, ext = os.path.splitext(file_name)
os.rename(os.path.join(path,file_name), os.path.join(path, str(i) + ext))