【问题标题】:os.rename cannot create a file that already existsos.rename 无法创建已存在的文件
【发布时间】:2021-01-04 14:37:05
【问题描述】:

现在我正在尝试使用 python 重命名包含 txt 文件的文件夹的内容:

原文件命名从0.txt到100.txt开始

我想把他们的名字改成从 10 而不是 0 开始(例如文件将从 10.txt 到 110.txt)

我有 2 个列表,一个包含原始名称路径,另一个包含新名称路径,我正在尝试使用 os.rename() 或 shutil.move() 重命名文件。

但是,当我尝试使用 os.rename() 时,我收到无法创建已经存在的文件的错误。

当我尝试使用 shutil.move() 时,它会删除每个重复的文件夹,只给我最后 9 个文件夹(101 到 110)。

有没有办法解决这个问题??

【问题讨论】:

    标签: python rename shutil


    【解决方案1】:

    我建议移动文件并在临时目录中重命名它们,删除原始文件并将文件从临时目录中移回。然后您可以选择删除您创建的临时目录。

    【讨论】:

    • 这是一个比我的答案更好的答案。使用 tmp 目录是处理此类文件系统问题的标准方法
    【解决方案2】:

    使用os.replace() 替换已存在的文件。要检查文件是否存在,请使用os.path.isfile('file path')

    【讨论】:

    • 不适用于 2.7 版
    【解决方案3】:

    您准确地定义了问题。例如,当您处理 02.txt 时,您将其重命名为 12.txt。十次迭代后,您将 同一个文件 重命名为 22.txt,然后是 23.txt,...直到您完成 102.txt。您对前 10 个文件执行此操作,系统地清除其他 90 个文件。

    您必须从有扩展空间的名称空间的末尾开始。从 100.txt 向下开始工作。将 100.txt 重命名为 110.txt,然后将 99.txt 重命名为 109.txt,等等。这样,您的动作始终有 10 个未使用的文件名间隔。

    编码留给读者作为练习。 :-)

    【讨论】:

      【解决方案4】:

      听起来您需要从列表的末尾开始。尝试先移动 100->110,然后再移动 99->109,依此类推。因为如果从列表的开头开始移动 1->11,则 11 已经存在。

      编辑:我实际上会推荐 Tarranoth 上面的答案

      【讨论】:

        【解决方案5】:

        尝试颠倒列表(原始名称和新名称):

        listOrig = ["0.txt", "1.txt", ..., "100.txt"]
        listNew = ["10.txt", "11.txt", ..., "110.txt"]
        
        # Reverse the lists
        listOrig = listOrig.reverse() # ["100.txt" ... "0.txt"]
        listNew = listNew.reverse() # ["110.txt" ... "10.txt"]
        

        【讨论】:

          猜你喜欢
          • 2012-11-12
          • 2020-04-12
          • 2020-12-18
          • 2018-02-14
          • 2019-05-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多