为什么要在GDAL Python中关闭数据集?


17

我经常在Python GDAL代码中看到人们在脚本结束时关闭数据集。为什么在Python GDAL中关闭数据集有意义?如果不这样做会不会有后果?

import gdal

# open dataset
ds = gdal.Open('test.tif')

# close dataset
ds = None

有时,C ++析构函数除了清理(对于某些驱动程序)以外,还会执行其他操作,例如重新计算统计信息。最好将其设置为“无”,blah238所说的所有内容以及AFAIK都是正确的。

Answers:


15

我认为这在脚本末尾没有任何用途,因为Python垃圾回收器在脚本退出时会自动执行相同的操作。您可能想要这样做的原因是在脚本的中间,以恢复通过访问数据集持有的资源,删除文件锁等,以便您可以重用它们。

del ds 应该具有相同的效果,但是其意图更加清楚。

更加Pythonic的方法是使用一条with语句,但是GDAL / OGR没有实现它。但是,确实有一些GDAL / OGR包装器,例如RasterioFiona


2
考虑Python文件对象。您用打开一个,f = open(filename)然后用关闭一个f.close()。不是del ff = None。为什么?因为不再引用对象后发生的事情是解释程序实现的详细信息,并且因为显式优于隐式(python.org/dev/peps/pep-0020)。
sgillies

1
同意,但是GDAL Python绑定不完全是Pythonic。GDALClose()如果您想显式地调用一个方法(我看到Rasterio在内部调用了它)。
blah238 2013年

2
在Python中,GDALClose()尚未实现,但将数据集设置为None(即ds = None)是等效的。
亚瑟
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.