Переименование файлов с помощью python приводит к дублированию файлов

#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
 

Надеюсь, я чем-то помог.