我有一个光栅图像,想用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 statements

Python's special methods

09-11 17:48
查看更多