@Elbro

Как правильно настроить пропуск?

Всем доброго времени суток. Есть скрипт, который качает изображения с определенной частотой и:

Дает им имена 1, 2, 3, 4
Создает папку temp
Скидывает в папку temp
По окончанию переименовывает папку

Бывает такое, что работа обрывается и файл валяется в исходной папке и скрипт сначала закидывает файл 1 в temp, качает новый и выдает ошибку (я все это симулировал ниже в скриншотах).
Вопрос, как удалить файл если два с одинаковым именем, либо же научить переписывать поверх.

(Если папка temp есть, то переместить, если нет, то создать и переместить)
Сам скрипт
import os 
import shutil
from os import path
filename = os.listdir(os.getcwd())
frames = ['.jpeg', '.jpg', '.svg', '.png', '.PNG']
framesLocation = "Snapshots_temp"
for file in filename:
    if os.path.splitext(file)[1] in frames:
        if(path.exists(framesLocation)):
            shutil.move(file, framesLocation)
        else:
            os.mkdir(framesLocation)
            shutil.move(file, framesLocation)

Одно изображение в папке
SCREENSHOT 1
62df90b052952914010496.png

После запуска скрипта, создалась папка и туда закинуло файл
SCREENSHOT 2
62df90b8a3bb8352198948.png

Вышло так, что папка осталась и уже пошли качаться новые файлы
SCREENSHOT 3
62df90c06bf91782682725.png

И сама ошибка
SCREENSHOT 4
62df90c7c4d09448457473.png
  • Вопрос задан
  • 94 просмотра
Решения вопроса 2
ligvake
@ligvake
Для того, чтобы shutil.move перезаписывал файлы, нужно указать директорию вместе с именем файла, который вы собираетесь переместить
Нужно поменять строчку с перемещением на
shutil.move(file, os.path.join(framesLocation, file))

Полный скрипт:
import os 
import shutil
from os import path
filename = os.listdir(os.getcwd())
frames = ['.jpeg', '.jpg', '.svg', '.png', '.PNG']
framesLocation = "Snapshots_temp"
for file in filename:
    if os.path.splitext(file)[1] in frames:
        if(path.exists(framesLocation)):
            shutil.move(file, os.path.join(framesLocation, file))
        else:
            os.mkdir(framesLocation)
            shutil.move(file, os.path.join(framesLocation, file))



Другой способ – делать проверку, существует ли файл (нужно не забыть from os.path import exists):
if(not exists(os.path.join(framesLocation, file))):


Тогда получится:
import os 
import shutil
from os import path
from os.path import exists

filename = os.listdir(os.getcwd())
frames = ['.jpeg', '.jpg', '.svg', '.png', '.PNG']
framesLocation = "Snapshots_temp"
for file in filename:
    if os.path.splitext(file)[1] in frames:
        if(not exists(os.path.join(framesLocation, file))):
            if(path.exists(framesLocation)):
                shutil.move(file, framesLocation)
            else:
                os.mkdir(framesLocation)
                shutil.move(file, framesLocation)
Ответ написан
Dr_Elvis
@Dr_Elvis Куратор тега Python
В гугле забанен
Используйте полные пути, а не относительные, тогда будет заменяться.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
SoreMix
@SoreMix Куратор тега Python
yellow
Не очень понял задачу, но нужно проверять наличие файла, и удалять его в случае чего
os.path.exists(filename)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы