Я хочу изменить a.txt
на b.kml
.
Как переименовать файл с помощью Python
Ответы (14)
Используйте os.rename
:
import os
os.rename('a.txt', 'b.kml')
C:/folder/file.txt
в Windows или /home/file.txt
в Linux / MacOS).
- person Alex P.; 26.06.2019
OSError
в системах Windows. os.path.exists
следует использовать для проверки существования цели перед переименованием. Это действительно создает ошибку Time Of Check to Time Of Use, но вряд ли вызовет проблемы. (Я не знаю простого способа обойти это - см. здесь.
- person AnnanFay; 28.09.2019
os.replace
- person LucG; 29.04.2020
os.rename
работает, только если источник и место назначения находятся в одной файловой системе. Если вы используете другую файловую систему, вам следует использовать shutil.move
.
- person cthemudo; 26.01.2021
Файл может находиться внутри каталога, в этом случае укажите путь:
import os
old_file = os.path.join("directory", "a.txt")
new_file = os.path.join("directory", "b.kml")
os.rename(old_file, new_file)
import shutil
shutil.move('a.txt', 'b.kml')
Это будет работать для переименования или перемещения файла.
shutil.move
- не лучший вариант, потому что это не атомарная операция. Например, если файл открыт, shutil.move
создаст файл с new_name
, но не удалит файл с old_name
, поэтому у вас останется два файла. os.rename
, с другой стороны, ничего не сделает, что является лучшим вариантом. С shutil.move
, даже если вы поймали ошибку, вам все равно придется беспокоиться о проверке и удалении мошеннического файла. Просто не стоит того, когда существует лучший инструмент: os.rename
.
- person mvbentes; 20.09.2017
Начиная с Python 3.4, для решения этой проблемы можно использовать модуль pathlib.
Если вы используете более старую версию, вы можете использовать версию с обратным переносом, которую можно найти здесь
Предположим, вы не находитесь на корневом пути (просто для того, чтобы немного усложнить его), который хотите переименовать, и должны указать полный путь, мы можем посмотреть на это:
some_path = 'a/b/c/the_file.extension'
Итак, вы можете выбрать свой путь и создать из него Path
объект:
from pathlib import Path
p = Path(some_path)
Просто чтобы предоставить некоторую информацию об этом объекте, который у нас есть сейчас, мы можем извлечь из него что-то. Например, если по какой-либо причине мы хотим переименовать файл, изменив имя файла с the_file
на the_file_1
, мы можем получить часть имени файла:
name_without_extension = p.stem
И еще держите удлинитель в руке:
ext = p.suffix
Мы можем выполнить нашу модификацию с помощью простой манипуляции со строкой:
Python 3.6 и выше используют f-строки!
new_file_name = f"{name_without_extension}_1"
Иначе:
new_file_name = "{}_{}".format(name_without_extension, 1)
И теперь мы можем выполнить наше переименование, вызвав метод rename
для созданного нами объекта пути и добавив ext
, чтобы завершить правильную структуру переименования, которую мы хотим:
p.rename(Path(p.parent, new_file_name + ext))
Короче, чтобы продемонстрировать его простоту:
Python 3.6+:
from pathlib import Path
p = Path(some_path)
p.rename(Path(p.parent, f"{p.stem}_1_{p.suffix}"))
В версиях ниже Python 3.6 вместо этого используется метод строкового формата:
from pathlib import Path
p = Path(some_path)
p.rename(Path(p.parent, "{}_{}_{}".format(p.stem, 1, p.suffix))
pathlib
представлена в python 3.4, поэтому совместное использование ответа здесь также дает представление о надежном модуле, чтобы продемонстрировать его универсальность и использование для более сложных требований.
- person idjaw; 07.09.2017
new_file_name = "{}_{}".format(name_without_extension, 1)
? Что такое {}_{}
? где я могу прочитать об этом подробнее?
- person Sasuke Uchiha; 05.05.2018
{}
предназначены для форматирования строк, о чем вы можете прочитать здесь. В конечном итоге происходит то, что {}
заменяются переменными, которые передаются методу format
. Таким образом, первый {}
будет содержать то, что находится в name_without_extension
, а второй будет содержать второй аргумент, который просто 1
.
- person idjaw; 05.05.2018
os.rename(old, new)
Это можно найти в документации Python: http://docs.python.org/library/os.html
Используйте 1_. Но вы должны передать функции полный путь к обоим файлам. Если у меня есть файл a.txt
на моем рабочем столе, я сделаю это, и я также должен предоставить полный переименованный файл.
os.rename('C:\\Users\\Desktop\\a.txt', 'C:\\Users\\Desktop\\b.kml')
Здесь следует отметить один важный момент: мы должны проверить, существуют ли какие-либо файлы с новым именем.
предположим, что если файл b.kml существует, то переименование другого файла с тем же именем приводит к удалению существующего файла b.kml.
import os
if not os.path.exists('b.kml'):
os.rename('a.txt','b.kml')
Использование Path.rename библиотеки Pathlib вместо os .rename:
import pathlib
original_path = pathlib.Path('a.txt')
new_path = original_path.rename('b.kml')
import shutil
import os
files = os.listdir("./pics/")
for key in range(0, len(files)):
print files[key]
shutil.move("./pics/" + files[key],"./pics/img" + str(key) + ".jpeg")
Это должно сработать. Python 3+
Если вы используете Windows и хотите переименовать свои тысячи файлов в папке, то: Вы можете использовать приведенный ниже код. (Python3)
import os
path = os.chdir(input("Enter the path of the Your Image Folder : ")) #Here put the path of your folder where your images are stored
image_name = input("Enter your Image name : ") #Here, enter the name you want your images to have
i = 0
for file in os.listdir(path):
new_file_name = image_name+"_" + str(i) + ".jpg" #here you can change the extention of your renmamed file.
os.rename(file,new_file_name)
i = i + 1
input("Renamed all Images!!")
os.chdir (rD: \ Folder1 \ Folder2)
os.rename (src, dst)
#src и dst должны находиться внутри Folder2
Вы можете использовать os.system для вызова терминала для выполнения задачи:
os.system('mv oldfile newfile')
mv
- это встроенная программа командной строки unix для перемещения / переименования файла.
- person Mikhail Geyer; 20.11.2016
chdir()
перейти в каталог, например что происходит под Windows, когда это UNC? И выполнение chdir()
имеет побочные эффекты. Я бы предпочел просто указать необходимые пути к os.rename()
напрямую, без chdir()
ing.
- person JonBrave; 22.11.2018
os.path
с современным pathlib
довольно сомнительно. Вместо этого пройдите весь путь с pathlib
.
- person tripleee; 24.10.2019