En C, usarías stat() y compara el st_dev campo. En Python, os.stat debe hacer lo mismo.
import os
def same_partition(f1, f2):
return os.stat(f1).st_dev == os.stat(f2).st_dev
Otra forma es el enfoque de "mejor pedir perdón que permiso":solo intente cambiarle el nombre y, si eso falla, tome el OSError apropiado. y pruebe el enfoque de copia. es decir:
import errno
try:
os.rename(source, dest):
except IOError, ex:
if ex.errno == errno.EXDEV:
# perform the copy instead.
Esto tiene la ventaja de que también funcionará en Windows, donde st_dev siempre es 0 para todas las particiones.
Tenga en cuenta que si realmente desea copiar y luego eliminar el archivo de origen (es decir, realizar un movimiento), en lugar de simplemente copiar, entonces shutil.move ya hará lo que desea:
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.