рекурсивное копирование и переименование файлов работает, затем неожиданно останавливается

#python #python-3.x #loops #file-rename #file-copying

#python #python-3.x #циклы #файл-переименовать #копирование файлов

Вопрос:

Контекст

  1. Необходимо многократно копировать и переименовывать файл изображения, пока не будет достигнуто определенное число отсчетов.

  2. Часть переименования должна соответствовать определенному возрастающему шагу.

  3. Это Python 3.7.0

Код

 import os
import shutil
import glob

fps = 30
timer = 1 #in seconds
count = fps * timer   1

#input and output file directory
src1 = glob.glob("./src/captured1.jpg")
dest = "./dst/"

#numbering start from 1 with increasing step of 4
for i in range(1,count,4):
    for file_path in src1:
        print(file_path)
        shutil.copy(file_path, dest)
        for filename in os.listdir(dest):
            os.rename(os.path.join(dest,filename), os.path.join(dest,'image'  str(i)   '.jpg')) 
  

Вывод

Ожидая, что изображения будут иметь последовательно пронумерованное имя (т.е image1.jpg image5.jpg image9.jpg и так далее)

Проблема

Код работал до image9.jpg , затем остановился в середине трассировки с ошибкой :

 Traceback (most recent call last):
  File "D:homeusermain.py", line 17, in <module>
    os.rename(os.path.join(dest,filename), os.path.join(dest,'captured'  str(i)   '.jpg'))
FileExistsError: [WinError 183] Cannot create a file when that file already exists: './dst/image5.jpg' -> './dst/image9.jpg'
  

Как я могу улучшить код?

Комментарии:

1. Из того, что я вижу, у вас проблема, потому что изображения не учитываются с 0, поэтому вам следует просто проверить последнее пронумерованное изображение, получить его имя, из этого получить его номер и продолжить переименование с этого номера

2. Проблема во внутреннем цикле for . Вы берете каждый файл и пытаетесь переименовать его в то же имя файла.

3. @ack разве цикл str(i) не должен уже позаботиться об этом?

4. Внутри for filename in os.listdir(dest): цикла i ничего не меняется.