【问题标题】:python os.rename ""cannot create a file when that file already existspython os.rename ""当该文件已存在时无法创建该文件
【发布时间】:2012-11-12 11:27:17
【问题描述】:

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。

但我收到错误 CANNOT CREATE A FILE WHEN THAT FILE ALREADY EXISTS. 如何解决这个问题?我正在使用 Windows 7。

【问题讨论】:

  • 确保文件不存在
  • 但是我需要将已经存在的文件colon-21.mp3重命名为21.mp3 ...所以它在技术上不存在..
  • @J.F.Sebastian 该链接在这种情况下并没有真正的帮助。他出现此错误的原因是因为他在字符串切片尝试中使用了不正确的索引,如我的回答中所述。
  • @Maxwell:这就是为什么我把它作为评论发布,而不是作为答案。该链接显示了如何避免异常。想想根据问题标题从谷歌登陆这里的人。

标签: python error-handling operating-system rename


【解决方案1】:

问题就在这里:

os.rename(filename, filename[7:])

Python 索引从 0 开始,字符串 "colon-" 只有 6 个字符长,因此使用您的代码,colon-21.mp3 将变为 1.mp3。将该行更改为使用filename[6:],您的问题应该会消失。

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

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

【讨论】:

  • 或者我们也可以使用split()-,即filename.split("-")[1]
  • @Ashwini 我并不是要认可 gran_profaci 使用的方法,我只是想向他展示他的代码是如何被破坏的。我同意使用硬编码数字通常是个坏主意。我已经更新了我的答案,以向 gran_profaci 解释为什么硬编码字符串长度不好,并将您的示例作为推荐的替代方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-10
  • 2020-12-18
  • 2021-01-04
  • 2022-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多