python os.rename"&引用;当文件已存在时,无法创建该文件

python os.rename"&引用;当文件已存在时,无法创建该文件,python,error-handling,operating-system,rename,Python,Error Handling,Operating System,Rename,K。。我只是在使用我在这里找到的一个简单脚本: import os from os import rename, listdir print os.listdir(".") for filename in os.listdir("."): if filename.startswith("colon-"): print filename os.rename(filename, filename[7:]) 我需要基本上把像colon-21.mp3这样的所有

K。。我只是在使用我在这里找到的一个简单脚本:

import os
from os import rename, listdir

print os.listdir(".")
for filename in os.listdir("."):
    if filename.startswith("colon-"):
        print filename
        os.rename(filename, filename[7:])
我需要基本上把像colon-21.mp3这样的所有文件转换成21.mp3

但是我得到一个错误,
当文件已经存在时,无法创建该文件。

如何解决这个问题?我正在使用Windows 7。

问题就在这里:

os.rename(filename, filename[7:])
Python索引从0开始,字符串
“colon-”
只有6个字符长,因此使用您的代码,colon-21.mp3将变为1.mp3。将该行改为使用
filename[6:://code>,您的问题就应该消失了

也就是说,像您这样使用硬编码字符串长度不是一个好主意。它很容易出错,原因正是我们在这里发现的(像这样的硬编码数字通常被称为“幻数”,因为很难说为什么它们被设置为给定的长度)。一个更好的选择是:

os.rename(filename, filename.split('-')[1])

确保文件不存在,但我需要重命名文件colon-21.mp3,该文件已作为21.mp3存在。。。所以它在技术上是不存在的。请看@J.F.Sebastian,这个链接在这种情况下并没有什么帮助。他犯此错误的原因是,正如我在回答中所解释的,他在字符串切片尝试中使用了不正确的索引。@Maxwell:这就是为什么我将其作为注释而不是答案发布的原因。该链接显示了如何避免异常。想想那些根据问题标题从谷歌登陆这里的人。或者我们也可以使用
split()
-
,即
filename.split(“-”)[1]
@Ashwini我不是想认可gran_profaci使用的方法,我只是想向他展示他的代码是如何被破坏的。我同意使用硬编码数字通常是个坏主意。我更新了我的答案,向gran_profaci解释了硬编码字符串长度不好的原因,并将您的示例作为推荐的替代方案。