python - это - Заменить команду в O.Rename




python что это (4)

В Unix, если dst существует и является файлом, он будет заменен молча, если у пользователя есть разрешение. Операция может завершиться неудачей при некоторых вариантах Unix, если src и dst находятся в разных файловых системах. В случае успеха переименование будет атомной операцией (это требование POSIX). В Windows, если dst уже существует, OSError будет поднят, даже если это файл; не может быть никакого способа реализовать атомное переименование, когда dst называет существующий файл . http://docs.python.org/library/os.html#os.rename

https://code.i-harness.com

Можно ли переименовать os.rename для перезаписывания другого файла, если он уже существует? Например, в коде ниже, если файл Tests.csv уже существует, он будет заменен файлом Tests.txt (который также был переименован в Tests.csv).

os.rename("C:\Users\Test.txt","C:\Users\Tests.csv");

Вы можете попробовать shutil.move() :

from shutil import move

move('C:\\Users\\Test.txt', 'C:\\Users\\Tests.csv')

Или os.remove и затем shutil.move :

from os import remove
from shutil import move

remove('C:\\Users\\Tests.csv')
move('C:\\Users\\Test.txt', 'C:\\Users\\Tests.csv')

Начиная с Python 3.3, теперь существует стандартное кросс-платформенное решение os.replace :

Переименуйте файл или каталог src в dst. Если dst - это каталог, OSError будет поднят. Если dst существует и является файлом, он будет заменен молча, если у пользователя есть разрешение . Операция может завершиться неудачей, если src и dst находятся в разных файловых системах. В случае успеха переименование будет атомной операцией (это требование POSIX).

Доступность: Unix, Windows.

Новое в версии 3.3.

Однако, вопреки документации, в Windows это не гарантируется атомарным (в Python 3.4.4). Это потому, что internally он использует MoveFileEx в Windows, что не дает такой гарантии.


Поскольку в documentation говорится, что невозможно гарантировать операцию атомного переименования в Windows, если файл существует, поэтому Python делает запрос на выполнение двойного шага os.remove + os.rename самостоятельно, обрабатывая потенциальные ошибки.

В unix-системах rename перезаписывает место назначения, если оно существует (поскольку операция гарантирована как атомарная).

Обратите внимание, что в окнах также возможно, что удаление целевого файла завершится неудачно, даже если у вас есть разрешение, потому что файл может быть использован. Это еще одно существенное ограничение файловой системы Windows, и вы должны обрабатывать его самостоятельно в коде.





python