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

问题描述 投票:6回答:3

说我有一个输入文件和一个目标目录。如何确定输入文件是否与目标目录位于同一硬盘驱动器(或分区)上?

我想做的是,如果文件位于其他位置,则将其复制,但如果文件相同,则将其移动。例如:

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)
python linux macos filesystems
3个回答
11
投票

在C中,您将使用stat()并比较st_dev字段。在python中,os.stat应该执行相同的操作。

import os
def same_partition(f1, f2):
    return os.stat(f1).st_dev == os.stat(f2).st_dev

3
投票

[另一种方法是“比请求许可要宽恕” —尝试重命名,如果失败,请捕获适当的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已经可以完成您想要的操作:

功能在模块关闭时的帮助:移动(src,dst)将文件或目录递归移动到另一个位置。如果目标位于我们当前的文件系统上,则只需使用改名。否则,将src复制到dst,然后删除src。

[[编辑]”由于Matthew Schinckel的评论而更新,其中提到shutil.move将在复制后删除源,这不一定是所需要的,因为问题仅涉及复制。

© www.soinside.com 2019 - 2024. All rights reserved.