假设我有一个input文件和一个目标目录。 如何确定input文件是否与目标目录位于相同的硬盘驱动器(或分区)上?
我想要做的是复制一个文件,如果它是不同的,但移动它,如果它是相同的。 例如:
target_directory = "/Volumes/externalDrive/something/" input_foldername, input_filename = os.path.split(input_file) if same_partition(input_foldername, target_directory): copy(input_file, target_directory) else: move(input_file, target_directory)
感谢CesarB的回答,实现了same_partition
function:
import os def same_partition(f1, f2): return os.stat(f1).st_dev == os.stat(f2).st_dev
在C中,您可以使用stat()
并比较st_dev
字段。 在python中, os.stat
应该这样做。
另一种方法是“更好地请求宽恕比权限”的方法 – 只是尝试重命名它,如果失败,赶上适当的OSError
并尝试复制的方法。 即:
import errno try: os.rename(source, dest): except IOError, ex: if ex.errno == errno.EXDEV: # perform the copy instead.
这样做的好处是它也可以在Windows上运行,其中st_dev对于所有分区都是0。
请注意,如果你真的想复制,然后删除源文件(即执行一个移动),而不是只复制,那么shutil.move将已经做你想要的:
帮助功能在模块shutil中移动: 移动(src,dst) 递归地将文件或目录移动到另一个位置。 如果目标位于我们当前的文件系统上,那么只需使用 改名。 否则,将src复制到dst,然后删除src。
[编辑]由于马修Schinckel的评论更新,提到shutil.move将删除复制后的来源,这不一定是想要的,因为问题只是提到复制。