Переименовать все файлы в папке - Python
Мне нужно, что бы я мог выбрать папку(использую интерфейс на tkinter) и программа сколько бы там не было файлов переименовывала все файлы. Это можно и реализовать и проще, что бы человек вписывал расширение и программа добавляла допустим как каждому файлу
while есть еще файлы
n +=1
......('n' + '.' + 'касширение')
перейти к следующему файлу
просмотрел достаточно много документации, но так и не нашел, как это можно сделать. Мне нужен именно этот кусочек кода, отвечающий за пока есть файл: переименовывать его, перейти к следующему, переименовать его. Допустим в папке 200 фото формата png(который задал пользователь) с названием из каши символов и в конце работы программы они превратятся в 200 файлов с названием от 1.png до 200.png, или наоборот пользователю нужна каша(с этим я разберусь, если пойму хотя бы, как сделать то, что я спрашивал)
Ответы (4 шт):
Полностью рабочий код.
import os
from tkinter import *
from tkinter import filedialog as fd
def selectDir():
return fd.askdirectory()+'/'
def startRename(directory):
directory1=directory.replace('/', '\\')
ext = ent1.get()
files=sorted([path for path in os.listdir(directory) if os.path.isfile(directory+path) and path.endswith(ext)])
i=0
while files:
file=files[0]
if not os.path.isfile(f'{directory}{i}.{ext}'):
name = f'{i}.{ext}'
os.rename(directory1+file, directory1+name)
del files[0]
i+=1
root = Tk()
root.geometry('350x75')
l1=Label(text='Расширение файла (без точки)')
l1.grid(row=0, column=0)
ent1 = Entry()
ent1.grid(row=1, column=0)
b1 = Button(text='Выбрать папку', command=lambda: startRename(selectDir()))
b1.grid(row=0,column=1)
root.mainloop()
Вариант №2 (без выбора расширения):
import os
from tkinter import *
from tkinter import filedialog as fd
def selectDir():
return fd.askdirectory()+'/'
def startRename(directory):
directory1=directory.replace('/', '\\')
files=sorted([path for path in os.listdir(directory) if os.path.isfile(directory+path)])
i=0
while files:
file=files[0]
ext=file.split('.')[-1]
if not os.path.isfile(f'{directory}{i}.{ext}'):
name = f'{i}.{ext}'
os.rename(directory1+file, directory1+name)
del files[0]
i+=1
root = Tk()
root.geometry('350x75')
b1 = Button(text='Выбрать папку', command=lambda: startRename(selectDir()))
b1.grid(row=0,column=1)
root.mainloop()
В python3 есть стандартный кроссплатформенный модуль для работы с файлами.
Ниже представлен пример создания тестового набора файлов и дальнейшего переименовывания файлов по запрашиваемому расширению.
import uuid
from pathlib import Path
def create_test_files(parent_dir: Path):
for i in range(0, 200):
new_file = '%s.png' % str(uuid.uuid4())
parent_dir.joinpath(new_file).open('a').close()
for i in range(0, 200):
new_file = '%s.txt' % str(uuid.uuid4())
parent_dir.joinpath(new_file).open('a').close()
def enumerate_files(dir_path: Path, ext: str):
# формируем маску для поиска
path_mask = '*.%s' % ext
# исключаем директории
only_files = [
f for f in dir_path.glob(path_mask)
if f.is_file()
]
# указываем `start`, если необходимо начинать индексацию не с 0
for idx, f_path in enumerate(only_files, start=1):
# формируем новый полный путь,
# иначе файлы будут созданы в директории, где была запущена программа
new_path = dir_path.joinpath('%d.%s' % (idx, ext))
f_path.rename(new_path)
if __name__ == '__main__':
parent_dir = Path('.\\dir\\')
create_test_files(parent_dir)
enumerate_files(parent_dir, 'png')
Вот это чудеса тут понаписали
import os
ext = 'your_ext'
for file in os.listdir('your_path'):
os.rename(file, f'{file}.{ext}')
Переименует все файлы в директории добавив к ним расширение ext, ну или как там вам надо это сделать
import os
ext = "your_ext"
new_ext = "new_ext"
for file in os.listdir('your_dir'):
if file.endswith(ext):
os.rename(file, f'{os.path.splitext(file)[0]}.{new_ext}')
Это для переименования формата
Решение вопроса на самом деле
import os
ext = "your_ext"
i = 1
dir = 'your_dir'
for file in os.listdir(dir):
if file.endswith(ext):
os.rename(f'{dir}/{file}', f'{dir}/{i}.{ext}')
i = i + 1
Вот еще более рабочий код
import os
def startRename():
directory = f"{os.getcwd()}\\"
directory1=directory.replace('/', '\\')
files=os.listdir(directory)
for file in files:
os.rename(directory1+file, directory1+file.replace('.Без названия',''))
startRename()