当唯一的区别是大写字母时,为什么os.rename不重命名文件?

时间:2019-06-04 20:30:41

标签: python windows filesystems

为什么这个基本的重命名脚本没有做什么? 只是尝试将每个单词的首字母大写。

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

2 个答案:

答案 0 :(得分:2)

如果您使用的文件系统不区分大小写,例如Windows,就会发生这种情况。原始名称和目标名称都已经向我们显示了现有名称并指向同一文件。

一种解决方法是简单地通过一个临时名称进行重命名,该临时名称的区别在于大小写:

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

答案 1 :(得分:0)

如评论中所述,原因是您正在使用不区分大小写的文件系统。它将旧名称和新名称视为相同,因此“重命名”成为空操作。

您必须为每个文件进行两次重命名:首先重命名为不同的临时名称;然后改为大写的实际名称。