Відповіді:
Використання os.rename:
import os
os.rename('a.txt', 'b.kml')
C:/folder/file.txtв Windows або /home/file.txtна Linux / MacOS).
OSErrorсистеми Windows. os.path.existsслід використовувати для перевірки наявності цілі перед перейменуванням. Це створює помилку "Час перевірки до часу використання", але навряд чи це спричинить проблеми. (Я не знаю простого способу цього - дивіться тут .
os.replace
Файл може бути всередині каталогу, у цьому випадку вкажіть шлях:
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 .
Станом на 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, тож обмін відповіддю також надає експозицію для міцного модуля, який демонструє його універсальність та використання для більш складних вимог.
os.rename(old, new)
Це можна знайти в документах Python: http://docs.python.org/library/os.html
Використовуйте os.rename. Але вам доведеться пройти повний шлях обох файлів до функції. Якщо у мене a.txtна робочому столі є файл, то я це зроблю, а також мені доведеться подати повний перейменований файл.
os.rename('C:\\Users\\Desktop\\a.txt', 'C:\\Users\\Desktop\\b.kml')
import os
# Set the path
path = 'a\\b\\c'
# save current working directory
saved_cwd = os.getcwd()
# change your cwd to the directory which contains files
os.chdir(path)
os.rename('a.txt', 'b.klm')
# moving back to the directory you were in
os.chdir(saved_cwd)
chdir()в каталог, наприклад, що відбувається під Windows, коли це UNC? І це chdir()має побічні ефекти. Я б скоріше просто вказав необхідні шляхи os.rename()безпосередньо, не chdir()ін.
Ви можете використовувати os.system для виклику терміналу для виконання завдання:
os.system('mv oldfile newfile')
mvце програма для вбудованої команди Unix для переміщення / перейменування файлу.
import os
import re
from pathlib import Path
for f in os.listdir(training_data_dir2):
for file in os.listdir( training_data_dir2 + '/' + f):
oldfile= Path(training_data_dir2 + '/' + f + '/' + file)
newfile = Path(training_data_dir2 + '/' + f + '/' + file[49:])
p=oldfile
p.rename(newfile)
os.pathз сучасним pathlibє досить непростим. Пройдіть весь шлях pathlibзамість цього.
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")
Це має робити. пітон 3+