У меня много папок. в каждой папке есть изображение. Я хочу переименовать все изображения с именем своей папки.
Например: Папка "1" имеет изображение "273.jpg" Я хочу изменить его на "1.jpg" и сохранить его в другом каталоге.
Это то, что я сделал до сих пор:
import os
import pathlib
root = "Q:/1_Projekte/2980/"
for path, subdirs, files in os.walk(root):
for name in files:
print (pathlib.PurePath(path, name))
os.rename(os.path.join(path, name), os.path.join(path, os.path.basename(path)))
print(os.path.basename(path))
Проблема в том, что он работает только для первой папки, а затем выпрыгивает с ошибкой:
this file is already available...
дерево папок и изображений выглядит так:
Q: /1_Projekte/2980/1/43425.jpg
Q: /1_Projekte/2980/2/43465.jpg
Q: /1_Projekte/2980/3/43483.jpg
Q: /1_Projekte/2980/4/43499.jpg
Таким образом, в каждом каталоге есть только один файл!
Возможно, у вас есть скрытые файлы в этих каталогах. Проверьте это. Если эти файлы не являются jpg
, вы можете использовать следующий код:
for path, subdirs, files in os.walk(root):
for name in files:
extension = name.split(".")[-1].lower()
if extension != "jpg":
continue
os.rename(os.path.join(path, name), os.path.join(path, os.path.basename(path) + "." + extension))
print(os.path.basename(path))
Этот код извлекает расширение файла и проверяет, равен ли он jpg
. Если расширение файла не является jpg
, то оператор continue будет запущен, и следующий файл будет проверяться. Если тип файла jpg
, сценарий переименовывает его. Также этот код добавляет исходное расширение файла к новому имени. Предыдущий код не справился с этим. Надеюсь, это тебе поможет.
Может быть, это может помочь...
import os
root = "Q:/1_Projekte/2980/"
subdirs = [x for x in os.listdir(root) if os.path.isdir(x)]
for dir_name in subdirs:
dir_path = root + dir_name + '/'
files = os.listdir(dir_path)
print(dir_name)
print(files)
for i in files:
counter = 1
extension = i.split('.')[-1]
new_name = dir_name + '.' + extension
while True:
try:
os.rename(dir_path + i, dir_path + new_name)
break
except:
# If the file exists...
new_name = dir_name + '({})'.format(counter) + '.' + extension
counter += 1
Этот код гарантирует, что даже если файл с существующим именем существует, он будет суффикс с числом в скобках.