Хорошо, вот мое решение.Возможно, не лучшее решение, но я старался сохранить верность вашему коду, как мог.Существует ряд различных соображений для эффективной доставки вашего кода.
1) Как я уже упоминал в своем комментарии, список представляет конечное количество вариантов имен, а также ограничивает вашу возможность итерации, ограничивая итерацию длиной списка.В противном случае вы получите ошибку индекса, когда у вас закончатся элементы в списке.Эта ошибка возникает, когда количество папок в целевом каталоге превышает количество элементов в вашем списке.
2) Должен быть какой-то динамический способ присвоения уникального значения различным именам папок.В большинстве случаев, если вы беспокоитесь о том, чтобы иметь одинаковое имя файла, или знаете, что оно будет одинаковым, вы добавляете что-то, что, как вы знаете, будет уникальным.В этом случае отметка даты / времени.Как вы видете.первые папки будут совпадать с именами элементов списка, затем, когда мы снова перезапустим Apple, она подключится к нашему условному выражению, чтобы убедиться, что его нет в каталоге, и прикрепит уникальное добавление отметки даты / времени.
3) Проверка наличия папок или файлов с одинаковыми именами выполняется с помощью os.path.exists. Это просто еще один способ узнать, существует ли путь и вернет ли логическое значение.Это полезный инструмент для работы с файлами.
Чтобы следовать логике этого кода, я бы создал каталог, настроил пять новых папок.Запустите этот скрипт.Вы увидите все уникальные имена в каталоге.Теперь добавьте две новые папки в каталог и снова запустите скрипт.Вы должны получить яблоко (дата / время) и апельсин (дата / время) и все остальные оригиналы, которые все еще там.
import os
import datetime
from time import sleep
path = 'your target directory'
files_location = os.listdir(path)
new_entry_name = ['apple', 'orange', 'banana', 'plum', 'strawberry']
i = 0
for folder in files_location: # STARTS ITERATING THROUGH FOLDERS IN TARGET DIRECTORY
sleep(3)
print('ON THIS FOLDER: ' + folder)
if folder in new_entry_name: # IF THE FOLDER NAME IS IN LIST, THEN PASS
print('Folder: ' + folder + ' is in list')
pass
else:
print(folder + ' is not in the list')
print('Checking if proposed folder name ' + new_entry_name[i] + ' is in directory')
if os.path.exists(os.path.join(path, new_entry_name[i])): # CHECKS NEW FOLDER NAME BEFORE RENAMING
print('Proposed name is taken, creating alternate')
currentDT = datetime.datetime.now()
new_name = new_entry_name[i] + currentDT.strftime('%Y%m%d%H%M%S') # ATTACHES DATETIME TO LIST ITEM
print('Renaming with alternate name')
os.rename(os.path.join(path, folder), os.path.join(path, new_name)) # RENAMES WITH DATETIME
if i == 4: # AVOIDS LIST INDEX ERROR BY CYCLING i BACK TO APPLE WHEN THE LIST WOULD BE EXHAUSTED
i -= 4
else:
i += 1
else:
# RENAMES FOLDER IF IT DOESN'T EXIST IN DIRECTORY
print('Renaming folder')
os.rename(os.path.join(path, folder), os.path.join(path, new_entry_name[i]))
if i == 4:
i -= 4
else:
i += 1
Дайте мне знать, если код не запускается.Кроме того, не стесняйтесь спрашивать, нужно ли мне что-то прояснить или помочь вам двигаться в правильном направлении.