A one liner to get all drivers (GDAL + OGR) (more or less 210 drivers)
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 (or you will not get the same number of drivers output as gdal_translate --formats
e.g 136 on my machine)
I also display if driver support only raster or both raster and vector, I also display the other capabilities (read/write, support vsi,...). The logic is a port of the equivalent C++ code
from osgeo import gdal
all_driver_names = [gdal.GetDriver(i).GetDescription() for i in range(gdal.GetDriverCount())]
gdal_driver_names = [ driver_name[driver_name for driver_name in all_driver_names if gdal.GetDriverByName(driver_name).GetMetadataItem('DCAP_RASTER') == 'YES']
driver_type = {
'DCAP_RASTER': 'raster',
'DCAP_MULTIDIM_RASTER': 'multidimensional raster',
'DCAP_VECTOR': 'vector',
'DCAP_GNM': 'geography network'
}
for driver_name in gdal_driver_names:
driver = gdal.GetDriverByName(driver_name)
driver_shortname = driver.ShortName # Get short name
driver_types = ','.join([driver_type[t] for t in driver_type.keys() if driver.GetMetadataItem(t) == 'YES']) # Get if driver support raster and vector or only raster
pszRFlag = ""
if driver.GetMetadataItem('DCAP_OPEN') == 'YES':
pszRFlag = "r";
pszWFlag = ""
if driver.GetMetadataItem('DCAP_CREATE') == 'YES':
pszWFlag = "w+";
elif driver.GetMetadataItem('DCAP_CREATECOPY') == 'YES':
pszWFlag = "w";
else:
pszWFlag = "o";
pszVirtualIO = ""
if driver.GetMetadataItem('DCAP_VIRTUALIO') == 'YES':
pszVirtualIO = "v";
else:
pszVirtualIO = "";
pszSubdatasets = ""
if driver.GetMetadataItem('DMD_SUBDATASETS') == 'YES':
pszSubdatasets = "s";
driver_longname = driver.LongName # Get Long name
print(f"{driver_shortname} -{driver_types}- ({pszRFlag}{pszWFlag}{pszVirtualIO}{pszSubdatasets}): {driver_longname}")