A one liner to get all drivers (GDAL + OGR)
python -c "from osgeo import gdal;print('\n'.join(sorted([gdal.GetDriver(i).GetDescription() for i in range(gdal.GetDriverCount())])))"
You can also filter drivers to get only GDAL one using the following
from osgeo import gdal
all_driver_names = [gdal.GetDriver(i).GetDescription() for i in range(gdal.GetDriverCount())]
gdal_driver_names = [
' - '.join([
driver_name, # Get short name
','.join([i.replace('DCAP_', '').lower() for i in ['DCAP_RASTER', 'DCAP_VECTOR'] if gdal.GetDriverByName(driver_name).GetMetadataItem(i) == 'YES']), # Get if driver support raster and vector or only raster
gdal.GetDriverByName(driver_name).LongName # Get Long name
]) for driver_name in all_driver_names
if gdal.GetDriverByName(driver_name).GetMetadataItem('DCAP_RASTER') == 'YES']
print('\n'.join(gdal_driver_names))
My example returns something like GTiff - raster - GeoTIFF
whereas the exact output in gdal_translate --formats
is GTiff -raster- (rw+vs): GeoTIFF
. What is missing in my code is how to get the read/write/vsi/... capabilities.
To understand how to get read write capabilities, you can look at C++ code to understand the complete rules https://github.com/OSGeo/gdal/blob/d0a12d1a74e08557605f57cf2d94dac82b9fdda9/gdal/gcore/gdal_misc.cpp#L3088.
For example, to get the info about r
(read) https://github.com/OSGeo/gdal/blob/d0a12d1a74e08557605f57cf2d94dac82b9fdda9/gdal/gcore/gdal_misc.cpp#L3106, you need in Python, to check if gdal.GetDriverByName(driver_name).GetMetadataItem('DCAP_OPEN') == 'YES'
and if OK, add 'r'
letter