我有一个光栅图像,想用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)。
答案 0 :(得分:1)
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()