假设我有一个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_partitionfunction:
import os def same_partition(f1,f2): return os.stat(f1).st_dev == os.stat(f2).st_dev
一些支持格式为“ Device Xxx”的NT命名空间绝对path的API
如何确定文件碎片的程度?
确定目录等同性(Windows)
模拟一个大的文件系统来testing在Windows中testing大内存映射(> 5tb)
为什么Walkingfiletree第二次更快?
cd / bash在符号链接上的行为
在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将删除复制后的来源,这不一定是想要的,因为问题只是提到复制。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。