排序错误:"已经存在"

时间:2018-03-30 15:12:51

标签: python-3.x sorting shutil

这段代码假设我的桌面排序,路径= / Users / nicolas / Desktop / prova / 如果目标文件夹不存在并且程序创建它,它可以正常工作, 否则,如果已经有一个同名文件夹,当他试图移动文件时会出错,并显示

完成输出:

.DS_Store nltks PNG Scherm.png Schermata 2018-03-28 alle 11.07.13.png DS_Store nltks PNG PNG Traceback(最近一次调用最后一次):   文件" / Users / nicolas / Desktop / tts /正在进行/排序machine.py",第16行,in     shutil.move(路径名称+ [X],路径+ currentexp)   文件" /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py" ;,第292行,移动     提高错误,"目标路径'%s'已存在" %real_dst shutil.Error:Destination path' /Users/nicolas/Desktop/prova/png/Scherm.png'已经存在 的iMac:W

但我没有使用ds_store estension和" nltk"只是一个不应该移动的文件夹。

程序

import os
import shutil

path = "/Users/nicolas/Desktop/prova/"
names  = os.listdir(path)
for x in range (0,len(names)):
    print names[x]
for x in range (0,len(names)):
    exp = names[x].split(".")
    currentexp = exp[-1]
    print (currentexp)
    if os.path.exists(path+currentexp):
        shutil.move(os.path.join(path, names[x]), os.path.join(path,currentexp))
    else:
        os.makedirs(path+currentexp)
        shutil.move(os.path.join(path, names[x]), os.path.join(path,currentexp))
 #   if names[x] not in os.path.exists(path+currentexp):
 #       shutil.move(path+names[x],path+curentexp)

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

来自documentation

  

如果目标是现有目录,则src将在该目录中移动。如果目标已经存在但不是目录,则可能会被覆盖,具体取决于os.rename()语义

总结一下,如果图像存在于目标目录中,则源和&目标目录位于同一文件系统上,lib.parseFunc_RTE.nonTypoTagStdWrap.encapsLines.innerStdWrap_all.ifBlank > lib.parseFunc_RTE.nonTypoTagStdWrap.encapsLines.innerStdWrap_all.ifBlank = 可以使用shutil.moveos.rename失败,因为您无法使用已存在的对象重命名对象。您必须先删除目标。

以下是我如何重写它:

os.rename

这个更简单的代码尝试在执行target_dir = os.path.join(path,currentexp) if not os.path.exists(target_dir): os.makedirs(target_dir) try: os.remove(os.path.join(target_dir, names[x])) except OSError: pass # cannot remove or doesn't exist, ignore shutil.move(os.path.join(path, names[x]), target_dir) 之前删除目标文件。当然shutil.move可能会失败,失败被困,然后os.remove因为另一个错误而失败,但这超出了我们的范围