Відповіді:
Використання 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+