6

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

我想要做的是复制一个文件,如果它在不同的地方,但如果它是相同的则移动它。例如:

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)
4

2 回答 2

13

在 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
于 2008-10-30T10:54:11.937 回答
3

另一种方法是“请求原谅而不是允许”的方法——尝试重命名它,如果失败,抓住适当的OSError并尝试复制方法。IE:

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。
于 2008-10-30T13:21:02.843 回答