我有一个光栅图像,想用gdal打开它以获取有关投影的一些信息。
使用以下代码打开可以正常工作:
from osgeo import gdal
gtiff = gdal.Open(filename)
prj = gtiff.GetProjection()
# do some work
但是,以下操作无效:
with gdal.Open(filename) as gtiff:
prj = gtiff.GetProjection()
而是显示属性错误:
AttributeError: __exit__
我认为后者通常被认为是更好的样式。我正在使用Python 3.4.5 :: Continuum Analytics,Inc.(anaconda)。
最佳答案
Python的许多范例都依靠“魔术方法”。例如,对len(x)
的调用将调用x.__len__()
。诸如>
或>=
之类的等式也使用魔术方法,该方法要加倍强调。
Python的with X as x
范例依赖于两个魔术方法:X.__enter__
和X.__exit__
。 gdal.Open
返回的类是gdal.Dataset
,它没有这些方法。因此,在使用像您提供的with as
语句时,它将引发错误。
打开和关闭gdal.Dataset
的正确方法是:
import gdal
ds = gdal.Open('filename.tif', gdal.GA_Update)
# do something
del ds
删除
Dataset
将确保已将更改写入文件。您还可以通过运行ds.FlushCache()
来编写这些更改Doc about Python's
with as
statementsPython's special methods