У тебя проблема с непониманием того как работают
f строки. Во-первых в
str(k) нет смысла,
k итак уже строка. Во-вторых,
k = f'{j[0]}_{j[1]}_{int(j[2])+2}' в этом моменте
k уже вычислен и ему присвоен результат выражения справа.
И получается что в цикле
for, в
new_abs_file_name = os.path.join(path, str(k) + ext) у тебя меняется только
ext, а
k будет всегда одинаковым, если будет одинаковое
ext у двух разных файлов то ты просто перетрёшь один файл другим.
В третьих,
i у тебя жёстко задано один раз, а тебе нужно динамически в цикле брать имя файла, которое у тебя называется
base_name и проделывать с ним то что ты делаешь с
i.
import os
path = r"C:\test\Изменение название фотографии\Фото"
for file_name in os.listdir(path):
# Имя файла и его формат
base_name, ext = os.path.splitext(file_name)
# Нужны файлы определенного формата
if ext.lower() not in ['.jpg', '.png']:
continue
# Полный путь к текущему файлу
abs_file_name = os.path.join(path, file_name)
# Полный путь к текущему файлу с новым названием
j = base_name.split('_')
k = f'{j[0]}_{j[1]}_{int(j[2])+2}'
new_abs_file_name = os.path.join(path, str(k) + ext)
os.rename(abs_file_name, new_abs_file_name)