首页 > 解决方案 > 当唯一的区别是大写时,为什么 os.rename 不重命名文件?

问题描述

为什么这个基本的重命名脚本没有做它应该做的事情?只是试图将每个单词的第一个字母大写。

import glob
import os

for filename in glob.glob("**/*.mp3", recursive = True):
    withcap = str(filename).title()

    print("nc " +(filename))
    print("wc " +(withcap))

    os.rename(filename, withcap)

打印的输出是正确的,但 os.rename 没有任何反应?

输出:

nc BLOOD COMMAND - Return Of The Arsonist [Clean].mp3
wc Blood Command - Return Of The Arsonist [Clean].Mp3

标签: pythonwindowsfilesystems

解决方案


如果您使用的操作系统具有不区分大小写的文件系统(例如 Windows),则可能会发生这种情况,其中原始名称和目标名称已经向我们显示既存在又指向同一个文件。

一种解决方法是简单地通过一个不同大小写的临时名称重命名:

for filename in glob.glob("**/*.mp3", recursive = True):
    withcap = str(filename).title()
    os.rename(filename, withcap+'.tmp')
    os.rename(withcap+'.tmp', withcap)

推荐阅读