Я хочу измениться a.txt
на b.kml
.
python
file-rename
zjm1126
источник
источник
C:/folder/file.txt
в Windows или/home/file.txt
в Linux / MacOS).OSError
в системах Windows.os.path.exists
должен использоваться, чтобы проверить, существует ли цель перед переименованием. Это создает ошибку «Время проверки - время использования», но вряд ли это вызовет проблемы. (Я не знаю простого способа обойти это - см. Здесь .os.replace
Файл может находиться внутри каталога, в этом случае укажите путь:
источник
Это будет работать, чтобы переименовать или переместить файл.
источник
shutil.move
не является хорошим вариантом из-за того, что не является атомарной операцией. Например, если файл открыт,shutil.move
он создаст файлnew_name
, но не удалит его,old_name
поэтому у вас останется два файла.os.rename
с другой стороны, ничего не поделаешь, что является лучшим вариантом . При этомshutil.move
, даже если вы поймете ошибку, вам все равно придется беспокоиться о проверке и удалении мошеннического файла. Просто не стоит, когда существует лучший инструментos.rename
.Начиная с Python 3.4 для решения этой проблемы можно использовать модуль pathlib .
Если вы используете более старую версию, вы можете использовать версию с бэкпортом, найденную здесь
Давайте предположим, что вы не находитесь в корневом пути (просто чтобы добавить к нему немного сложности), вы хотите переименовать и должны предоставить полный путь, мы можем посмотреть на это:
Итак, вы можете взять свой путь и создать из него
Path
объект:Просто для того, чтобы предоставить некоторую информацию об этом объекте, который у нас есть сейчас, мы можем извлечь из него вещи. Например, если по какой-либо причине мы хотим переименовать файл, изменив имя файла с
the_file
на наthe_file_1
, то мы можем получить часть имени файла:И еще держите удлинитель в руке:
Мы можем выполнить нашу модификацию с помощью простой обработки строк:
Python 3.6 и выше используют f-строки!
В противном случае:
И теперь мы можем выполнить наше переименование, вызвав
rename
метод для объекта пути, который мы создали, и добавив его,ext
чтобы завершить правильную структуру переименования, которую мы хотим:Короче, чтобы продемонстрировать его простоту:
Python 3.6+:
Версии ниже Python 3.6 используют метод строкового формата:
источник
pathlib
библиотека представлена в Python 3.4, поэтому разделение ответа здесь также предоставляет возможность для твердого модуля продемонстрировать его универсальность и использование для более сложных требований.{}
для форматирования строк, о котором вы можете прочитать здесь . В конечном итоге происходит{}
замена get на переменные, которые передаютсяformat
методу. Таким образом, первый{}
будет содержать то, что находится внутриname_without_extension
, а второй будет содержать второй аргумент, который просто1
.os.rename(old, new)
Это можно найти в документации по Python: http://docs.python.org/library/os.html.
источник
Использование
os.rename
. Но вы должны передать полный путь обоих файлов к функции. Если у меня есть файлa.txt
на рабочем столе, так что я буду делать, а также я должен дать полный переименованный файл тоже.источник
источник
chdir()
к каталогу, например, что происходит под Windows, когда это UNC? И делать этоchdir()
имеет побочные эффекты. Я бы предпочел просто указать необходимые путиos.rename()
напрямую, но неchdir()
.Вы можете использовать os.system для вызова терминала для выполнения задачи:
источник
mv
и встроенная в Unix программа командной строки для перемещения / переименования файла.источник
os.path
с современнымpathlib
довольно сомнительным. Пройдите весь путьpathlib
вместо этого.Это должно сделать это. питон 3+
источник