Saya cukup sering melihat dalam kode Python GDAL bahwa orang menutup dataset di akhir skrip mereka. Mengapa masuk akal untuk menutup dataset dengan Python GDAL? Adakah konsekuensi jika saya tidak melakukannya?
import gdal
# open dataset
ds = gdal.Open('test.tif')
# close dataset
ds = None
Jawaban:
Saya tidak berpikir ini memiliki tujuan apa pun di akhir skrip, karena pemulung sampah Python akan melakukan hal yang sama secara otomatis ketika skrip keluar. Alasan Anda mungkin ingin melakukannya adalah di tengah skrip Anda, untuk memulihkan sumber daya yang dimiliki dengan mengakses dataset, menghapus kunci file, dll. Sehingga Anda dapat menggunakannya kembali.
del ds
harus memiliki efek yang sama tetapi lebih jelas untuk maksudnya.Pendekatan yang lebih Pythonic akan menggunakan
with
pernyataan , tetapi GDAL / OGR tidak mengimplementasikannya. Namun, ada beberapa pembungkus GDAL / OGR seperti Rasterio dan Fiona yang melakukannya.sumber
f = open(filename)
dan Anda menutup satu denganf.close()
. Tidakdel f
atauf = None
. Mengapa? Karena apa yang terjadi pada objek setelah mereka tidak lagi direferensikan adalah detail dari implementasi penerjemah dan karena eksplisit lebih baik daripada implisit ( python.org/dev/peps/pep-0020 ).GDALClose()
metode yang harus dipanggil jika Anda ingin eksplisit (saya melihat bahwa Rasterio menyebutnya secara internal ).GDALClose()
belum diimplementasikan tetapi pengaturan dataset keNone
(yaitu,ds = None
) adalah setara.