In C, useresti stat()
e confronta il st_dev
campo. In Python, os.stat
dovrebbe fare lo stesso.
import os
def same_partition(f1, f2):
return os.stat(f1).st_dev == os.stat(f2).st_dev
Un altro modo è l'approccio "è meglio chiedere perdono che permesso":prova semplicemente a rinominarlo e, se fallisce, prendi il OSError
appropriato e prova l'approccio della copia. cioè:
import errno
try:
os.rename(source, dest):
except IOError, ex:
if ex.errno == errno.EXDEV:
# perform the copy instead.
Questo ha il vantaggio che funzionerà anche su Windows, dove st_dev è sempre 0 per tutte le partizioni.
Nota che se vuoi effettivamente copiare e quindi eliminare il file sorgente (ad es. eseguire uno spostamento), piuttosto che limitarti a copiare, shutil.move farà già quello che vuoi:
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.