繁体   English   中英

os.rename 无法创建已存在的文件

[英]os.rename cannot create a file that already exists

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

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

我想将它们的名称更改为从 10 而不是 0 开始(例如,文件将是 10.txt 到 110.txt)

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

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

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

有没有解决的办法 ??

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

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

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

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

听起来您需要从列表的末尾开始。 尝试先移动 100->110,然后移动 99->109,等等。因为如果您从列表的开头开始移动 1->11,那么当您尝试移动 1->11 时,11 将已经存在。

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

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

尝试反转列表(使用原始名称和新名称):

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"]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM