Je vois assez souvent dans le code Python GDAL que les gens ferment des ensembles de données à la fin de leur script. Pourquoi est-il judicieux de fermer un ensemble de données dans Python GDAL? Y a-t-il des conséquences si je ne le fais pas?
import gdal
# open dataset
ds = gdal.Open('test.tif')
# close dataset
ds = None
Réponses:
Je ne pense pas que cela ait un but à la fin du script, car le garbage collector Python fera automatiquement la même chose à la fin du script. La raison pour laquelle vous voudrez peut-être le faire est au milieu de votre script, pour récupérer les ressources détenues en accédant à l'ensemble de données, supprimer les verrous de fichiers, etc. afin de pouvoir les réutiliser.
del ds
devrait avoir le même effet mais est plus clair quant à son intention.L'approche la plus pythonique serait d'utiliser une
with
instruction , mais GDAL / OGR ne l'implémente pas. Cependant, il existe certains wrappers GDAL / OGR comme Rasterio et Fiona qui le font.la source
f = open(filename)
et vous fermez un avecf.close()
. Pasdel f
ouf = None
. Pourquoi? Parce que ce qui arrive aux objets après qu'ils ne sont plus référencés est un détail de l'implémentation de l'interpréteur et parce qu'explicite vaut mieux qu'implicite ( python.org/dev/peps/pep-0020 ).GDALClose()
méthode qui devrait être appelée si vous voulez être explicite (je vois que Rasterio appelle cela en interne ).GDALClose()
n'a pas été implémenté, mais définir l'ensemble de données surNone
(c'est- à -direds = None
) est équivalent.