#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. Какие последствия это будет иметь? Кажется, это работает до сих пор