在Python中打开Image.open之后是否不必关闭?


python打开

使用内置函数open在python中打开文件。如果使用open,它将返回文件对象,因此您可以使用文件对象的API读写文件。

文件对象是准备访问磁盘上文件的API,在python中,它使用open作为标准调用。这是非常基本的操作,因此任何使用Python的人都将使用此功能。

文件对象关闭

使用

open时,有必要处理是否将其与with子句一起用作集合,还是显式使用close方法。

1
2
with open('xxxxx.txt', 'r') f:
    contents = f.read()
1
2
3
f = open('xxxxx.txt', 'r')
contents = f.read()
f.close()

之所以需要以这种方式关闭文件对象,是因为如果打开大量文件对象,则会发生Too many open files的OS错误。

处理图像的枕头的图像

枕头模块Image通常用于在python中打开图像。

1
2
from PIL import Image
im = Image.open('xxxxx.jpg')

由于它访问

文件,因此它应该在内部创建文件对象,但是不像内置open那样不使用withclose可以吗?

影像生命周期

Image完成open后将创建文件对象。然后,当实际读取图像数据时,在内部执行load方法。完成此操作后,文件对象自动为close(但请注意,这是单帧png,jpg等,而不是多帧gif等)。因此,Image也具有close方法,但是在正常情况下,即使不使用close也没有问题。

总之,

  • 无需执行close即可读取诸如jpg和png之类的单帧图像文件。
  • 但是,请注意,在读取gif等多帧图像文件时,不会自动执行close

印象数

  • 我认为这是一种完善的机制,因为我认为在处理图像时一旦调用数据就不太可能再次使用文件对象。
  • 这是一种完善的机制,但我认为如果我不理解与内置open的区别,那将会令人困惑。

参考

  • 枕头中的文件处理
  • 影像模组
  • PIL.Image的源代码