Python удаление файлов

#python #for-loop #python-os

#python #для цикла #python-os

Вопрос:

В настоящее время мне очень сложно использовать циклы for для удаления файлов, которые имеют хэш-совпадение в моей базе данных хэшей.

Я могу успешно удалить одно изображение, которое имеет совпадение, но при удалении большего количества он пытается удалить изображение, которое он только что удалил, а затем завершает сбой моей программы. Я понятия не имею, почему он это делает, любая помощь была бы очень признательна.

 def checkImage():
database_file = "hash_database.txt"

for filename in os.listdir('NewImages//'):
    upload = file_path   '\'   filename
    print(filename)

# Get hash of each image
for filename in os.listdir('NewImages//'):
    new_images = imagehash.phash(Image.open('NewImages//'   filename))

    with open(database_file) as checkingHash:
        if str(new_images) in checkingHash.read():
            print("Delete this image, hash is already in database")
            os.remove(upload)
        else:
            with open(database_file, "a") as databaseFileWrite:
                databaseFileWrite.write(str(new_images)   " "   filename   "n")
 

Ошибка FileNotFoundError: [Ошибка 2] Система не может найти указанный файл: ‘C:UsersmyaltOneDriveDesktopPython ПроектыХэшированиеНовые изображенияimage4.png’

Редактировать:

посмотрев на него еще немного, я обнаружил, что это потому, что мой первый цикл for устанавливает файл для удаления до последнего изображения в каталоге. Таким образом, второй цикл for просто продолжает пытаться удалить последнее изображение.

Теперь я знаю проблему, я просто не знаю, как это обойти.

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

1. Почему у вас есть два цикла? Во втором цикле, если вы решите удалить файл, вам нужно удалить текущий файл, над которым работает второй цикл, а не конечный файл, над которым работал первый цикл.

2. Ну, правильный ли отступ?

3. Спасибо @jasonharper, теперь я решил эту проблему. Я удалил первый цикл for и использовал только второй. Легенда.

4. Вы пытаетесь открыть файл в режиме добавления, пока он все еще открыт в режиме чтения. Это может привести к некоторым интересным результатам.

5. Какие последствия это будет иметь? Кажется, это работает до сих пор