#python-3.x
#python-3.x
Вопрос:
У меня есть папка со следующими файлами:
- [11111]Text.txt
- [22222]Text.txt
- [33333]Text.txt
- [44444]Text.txt
Мне нужно переименовать файлы, чтобы удалить обозначение [11111] из начала имени файла, однако это приводит к дублированию имен файлов.
Я написал базовый скрипт, который удалит [11111] из первого файла, и если произойдет какое-либо дублирование с последующими файлами, он назовет файл [Duplicate]_[#]_text.txt где [#] — случайное число
Когда я запустил код, он правильно переименовал первый файл и переименовал второй файл с требуемой строкой, но он не продолжил работу с другими файлами, а вместо этого выдал следующую ошибку:
Ошибка FileExistsError: [WinError 183] Не удается создать файл, если этот файл уже существует: ‘Destination/[33333]Text.txt ‘ -> ‘Назначение/[Дубликат]_[1]Text.txt ‘
Приведенный ниже код — это то, что у меня есть в настоящее время, хотя я также пробовал несколько итераций
Location = (Destination_Folder)
Dupe_Counter = random.randint(0,255)
for filename in os.listdir(Location):
try:
if filename.startswith("["):
os.rename(Location filename, Location filename[7:])
except:
os.rename(Location filename, Location '[Duplicate]_' '[' str(Dupe_Counter) ']' filename[7:])
Я предполагаю, что на самом деле он не использует Dupe_Counter при создании новых файлов, однако я не уверен на 100%, где я ошибаюсь.
Любая помощь приветствуется.
Ответ №1:
В вашем Dupe_Counter вы генерируете случайное число, которое иногда может конфликтовать с результатами. Но, кроме того, вы генерируете случайный Dupe_Counter только один раз. Попробуйте сгенерировать случайное число для каждой итерации.
Location = (Destination_Folder)
for filename in os.listdir(Location):
Dupe_Counter = random.randint(0,255)
try:
if filename.startswith("["):
os.rename(Location filename, Location filename[7:])
except:
os.rename(Location filename, Location '[Duplicate]_' '[' str(Dupe_Counter) ']' filename[7:])
Но я бы рекомендовал генерировать возрастающую последовательность для переименования файлов и лучшего понимания.
Что-то вроде этого:
Location = (Destination_Folder)
for filename in os.listdir(Location):
Dupe_Counter = 101
try:
if filename.startswith("["):
os.rename(Location filename, Location filename[7:])
except:
os.rename(Location filename, Location '[Duplicate]_' '[' str(Dupe_Counter) ']' filename[7:])
Dupe_Counter = 1
Надеюсь, я чем-то помог.