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.