Найти - Пользователи
Полная версия: как закрыть открытое изображение?
Начало » Python для новичков » как закрыть открытое изображение?
1
ilnur
такой код

from PIL import Image
from PIL.ExifTags import TAGS
import os

PATH=os.getcwd()

i = Image.open(PATH+'\\1_horses.jpg')
os.remove(PATH+'\\1_horses.jpg')
в итоге получаю ошибку
Traceback (most recent call last):
File "D:\Ильнур\Мои документы\Desktop\фото\1.py", line 8, in <module>
os.remove(PATH+'\\1_horses.jpg')
WindowsError: [Error 32] Процесс не может получить доступ к файлу,: 'D:\\\xc8\xeb\xfc\xed\xf3\xf0\\\xcc\xee\xe8 \xe4\xee\xea\xf3\xec\xe5\xed\xf2\xfb\\Desktop\\\xf4\xee\xf2\xee\\1_horses.jpg'
я так думаю что я открыл файл, и не закрыл. а как его закрыть?

спасибо
Piton23
хм, а зачем открывать файл перед его удалением?, к чему строка 7? или это часть кода? Ошибка в том что файло используется и не может удалится

И вообще какая цель?
ilnur
это просто кусок/выдержка из кода.

строка 7 нужна для последующей работы.
я понимаю что файл открыт и используется. как его закрыть?
а если удалить переменную перед удалением файла?
сейчас попробую

мне вообще интересно. при обычном открытии файла я могу закрыть файл. а когда через модуль PIL? не нашёл инфы просто по этому

P.S. вот так работает без ошибок. но правильно ли так делать?

from PIL import Image
from PIL.ExifTags import TAGS
import os

PATH=os.getcwd()

i = Image.open(PATH+'\\1_horses.jpg')
del(i)
os.remove(PATH+'\\1_horses.jpg')
изображения у меня открываются в цикле, с таким кодом будет хорошо? или есть решение получше.
cutwater
А всего-то надо спросить google.

http://bytes.com/topic/python/answers/24308-pil-do-i-need-close
ilnur
cutwater
спасибо
fp = open(filename, "rb")
im = Image.open(fp) # open from file object
im.load() # make sure PIL has read the data
fp.close()
получается что два раза открывается файл? или как.
я думал что у PIL есть своя функция закрытия файла. поэтому и спращивал.
cutwater
Для тех кто упорно не хочет думать головой и читать документацию и комментарии по ссылке.

PIL работает с объектами изображений, не файлами. Он автоматически закрывает файл, когда в нем более нет необходимости.
Если Вы не доверяете PIL используйте следующее.
В данном примере Вы открываете файл вручную, передаете в open уже объект file и Image с ним работает (для особо одаренных: второй раз файл не открывается)
Соответственно load позволяет удостовериться в том что изображение было загружено в память и файл после этого можно закрыть.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB