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
もう 1 つの方法は、「許可よりも許しを求める方がよい」アプローチです。名前を変更してみて、それが失敗した場合は、適切な OSError をキャッチします。 そしてコピーアプローチを試してください。例:
import errno
try:
os.rename(source, dest):
except IOError, ex:
if ex.errno == errno.EXDEV:
# perform the copy instead.
これには、すべてのパーティションで st_dev が常に 0 である Windows でも機能するという利点があります。
単にコピーするのではなく、実際にソース ファイルをコピーしてから削除する (つまり、移動を実行する) 場合は、shutil.move が既に目的を果たしていることに注意してください。
Help on function move in module shutil:
move(src, dst)
Recursively move a file or directory to another location.
If the destination is on our current filesystem, then simply use
rename. Otherwise, copy src to the dst and then remove src.