Google 一搜python 剪切文件,出來shutil 這模塊,網上很多人也跟瘋說shutil.move(src, dst)就是用來剪切文件的,結果一試,剪切毛線,文件都復制到另一個文件夾了,源文件還在,因為我的源文件正在被另一個程序使用,所以shutil.move(src, dst)把源文件復制到別的地方后沒法再對源文件進行刪除,這冒牌貨卻仍保留着復制后的文件。美其名曰移動文件。。。。網上也有人給出了shutil.move(src, dst)的源碼,先來看下它的源碼吧。。。
def move(src, dst): real_dst = dst if os.path.isdir(dst): real_dst = os.path.join(dst, _basename(src)) if os.path.exists(real_dst): raise Error, "Destination path '%s' already exists" % real_dst try: os.rename(src, real_dst) except OSError: if os.path.isdir(src): if destinsrc(src, dst): raise Error, "Cannot move a directory '%s' into itself '%s'." % (src, dst) copytree(src, real_dst, symlinks=True) rmtree(src) else: copy2(src, real_dst) os.unlink(src)
很明顯,函數沒有對當前正在被別的程序使用的文件進行判斷,簡單的先復制再刪除,刪除不了的也就不管了。分析了此源碼的人到最后卻還在說此功能類似於windows的ctrl+x->ctrl+v操作。。你是傻嗎。。。
本來想自己寫個程序判斷的,但是懶得寫了,最后發現用os.rename(sourceFile, targetFile)可以完美解決。。。就用它了。。。
