Имя файла ("file.foo") должно быть включено как в исходный, так и в конечный аргументы. Если оно отличается между ними, файл будет не только перемещен, но и переименован.
Каталог, в котором создается новый файл, должен уже существовать.
В Windows файл с таким именем не должен существовать, иначе будет вызвано исключение, но os.replace() автоматически заменит файл даже в этом случае.
shutil.move в большинстве случаев просто вызывает os.rename. Однако, если место назначения находится на другом диске, чем исходный, вместо этого он скопирует, а затем удалит исходный файл.
Ответ 2
Хотя os.rename() и shutil.move() оба будут переименовывать файлы, команда, которая ближе всего к команде Unix mv, является shutil.move(). Разница в том, что os.rename() не работает, если источник и место назначения находятся на разных дисках, в то время как shutil.move() файлы не зависят от диска.
Ответ 3
После Python 3.4 вы также можете использовать pathlib's class Path для перемещения файла.