如何确定一个目录是否在同一分区上

假设我有一个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

我如何find在所有子目录中具有相同名称的所有文件

一些支持格式为“ Device Xxx”的NT命名空间绝对path的API

如何确定文件碎片的程度?

确定目录等同性(Windows)

使用Python编程窗口中虚拟文件系统的最简单方法

模拟一个大的文件系统来testing在Windows中testing大内存映射(> 5tb)

为什么Walkingfiletree第二次更快?

cd / bash在符号链接上的行为

有没有办法看到一个符号链接的实际内容

为什么PHP include()不改变文件访问时间?

在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将删除复制后的来源,这不一定是想要的,因为问题只是提到复制。

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....