这段代码假设我的桌面排序,路径= / 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)
感谢您的帮助
答案 0 :(得分:0)
如果目标是现有目录,则src将在该目录中移动。如果目标已经存在但不是目录,则可能会被覆盖,具体取决于os.rename()语义
总结一下,如果图像存在于目标目录中,则源和&目标目录位于同一文件系统上,lib.parseFunc_RTE.nonTypoTagStdWrap.encapsLines.innerStdWrap_all.ifBlank >
lib.parseFunc_RTE.nonTypoTagStdWrap.encapsLines.innerStdWrap_all.ifBlank =
可以使用shutil.move
,os.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
因为另一个错误而失败,但这超出了我们的范围