I'm currently developing a Python Module to reproject shapefiles and CAD drawings (DWG, DXF) that have known and unknown coordinate systems. The code below deals with the known coordinate systems of the shapefiles of which there are 1500 shapefiles and 3600 CAD drawings. I realize that there are limitations in being able to identify the correct coordinate system of shapefiles\CAD drawings with unknown coordinate systems. I found the following two articles:

Projected Coordinate System Tables: Datum Arc 1960

Projected Coordinate System Tables: Datum WGS 84
I was hoping that by comparing the spatial extent of the shapefiles\CAD drawings with the extent of the coordinate systems (i.e. Arc_1960_UTM_Zone_37S, WGS_1984_UTM_Zone_37S) I would be able to determine the correct coordinate system. The first problem is that the extent is in decimal degrees and for some reason or other they are in WGS 84.

Projected Coordinate System Tables: values are based upon WGS84
If anyone has been able to come up with a workflow of identifying unknown coordinate systems based on the spatial extent of the shapefiles\feature classes\CAD drawings i'd truly appreciate any advice.
<SPAN class="string token">'''
Created on 03 Feb 2017
@author: PeterW
'''</SPAN>
<SPAN class="comment token"># import site-packages and modules</SPAN>
<SPAN class="keyword token">import</SPAN> arcpy
<SPAN class="keyword token">import</SPAN> glob2
<SPAN class="keyword token">import</SPAN> os
<SPAN class="keyword token">from</SPAN> pathlib <SPAN class="keyword token">import</SPAN> Path
<SPAN class="comment token"># set arguments</SPAN>
input_folder <SPAN class="operator token">=</SPAN> Path<SPAN class="punctuation token">(</SPAN>r<SPAN class="string token">"H:\Tanzania2"</SPAN><SPAN class="punctuation token">)</SPAN>
output_folder <SPAN class="operator token">=</SPAN> r<SPAN class="string token">"H:\gdb"</SPAN>
<SPAN class="comment token"># set environment settings</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>env<SPAN class="punctuation token">.</SPAN>overwriteOutput <SPAN class="operator token">=</SPAN> <SPAN class="token boolean">True</SPAN>
<SPAN class="comment token"># output coordinate system WGS_1984_UTM_Zone_37S \ 32737</SPAN>
out_coord <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>SpatialReference<SPAN class="punctuation token">(</SPAN><SPAN class="number token">32737</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token"># function to create new geodatabase</SPAN>
<SPAN class="keyword token">def</SPAN> <SPAN class="token function">fgdb</SPAN><SPAN class="punctuation token">(</SPAN>input_folder<SPAN class="punctuation token">,</SPAN> output_folder<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
gdb <SPAN class="operator token">=</SPAN> <SPAN class="string token">"{0}.gdb"</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN>input_folder<SPAN class="punctuation token">.</SPAN>parts<SPAN class="punctuation token">[</SPAN><SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>env<SPAN class="punctuation token">.</SPAN>workspace <SPAN class="operator token">=</SPAN> output_folder
arcpy<SPAN class="punctuation token">.</SPAN>AddMessage<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Creating {0}"</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN>gdb<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">if</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>Exists<SPAN class="punctuation token">(</SPAN>gdb<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>Delete_management<SPAN class="punctuation token">(</SPAN>gdb<SPAN class="punctuation token">)</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>CreateFileGDB_management<SPAN class="punctuation token">(</SPAN>output_folder<SPAN class="punctuation token">,</SPAN> gdb<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">else</SPAN><SPAN class="punctuation token">:</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>CreateFileGDB_management<SPAN class="punctuation token">(</SPAN>output_folder<SPAN class="punctuation token">,</SPAN> gdb<SPAN class="punctuation token">)</SPAN>
out_gdb <SPAN class="operator token">=</SPAN> <SPAN class="string token">"{0}\\{1}"</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN>output_folder<SPAN class="punctuation token">,</SPAN> gdb<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">return</SPAN> out_gdb
out_gdb <SPAN class="operator token">=</SPAN> fgdb<SPAN class="punctuation token">(</SPAN>input_folder<SPAN class="punctuation token">,</SPAN> output_folder<SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token"># function to determine projection transformations</SPAN>
<SPAN class="keyword token">def</SPAN> <SPAN class="token function">projections</SPAN><SPAN class="punctuation token">(</SPAN>shp<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
spatial_ref <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>Describe<SPAN class="punctuation token">(</SPAN>shp<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN>spatialReference
trans <SPAN class="operator token">=</SPAN> <SPAN class="string token">""</SPAN>
<SPAN class="keyword token">if</SPAN> spatial_ref<SPAN class="punctuation token">.</SPAN>type <SPAN class="operator token">!=</SPAN> <SPAN class="string token">"Unknown"</SPAN> <SPAN class="operator token">and</SPAN> <SPAN class="string token">"Cape"</SPAN> <SPAN class="keyword token">in</SPAN> spatial_ref<SPAN class="punctuation token">.</SPAN>GCS<SPAN class="punctuation token">.</SPAN>datumName<SPAN class="punctuation token">:</SPAN>
trans <SPAN class="operator token">=</SPAN> <SPAN class="string token">"Cape_To_WGS_1984_2"</SPAN>
<SPAN class="keyword token">if</SPAN> spatial_ref<SPAN class="punctuation token">.</SPAN>type <SPAN class="operator token">!=</SPAN> <SPAN class="string token">"Unknown"</SPAN> <SPAN class="operator token">and</SPAN> <SPAN class="string token">"Arc"</SPAN> <SPAN class="keyword token">in</SPAN> spatial_ref<SPAN class="punctuation token">.</SPAN>GCS<SPAN class="punctuation token">.</SPAN>datumName<SPAN class="punctuation token">:</SPAN>
trans <SPAN class="operator token">=</SPAN> <SPAN class="string token">"Arc_1960_To_WGS_1984_3"</SPAN>
<SPAN class="keyword token">return</SPAN> spatial_ref<SPAN class="punctuation token">,</SPAN> trans
<SPAN class="comment token"># function iterate over shapefiles, reproject to single coordinate system</SPAN>
<SPAN class="keyword token">def</SPAN> <SPAN class="token function">reproject_shp</SPAN><SPAN class="punctuation token">(</SPAN>out_gdb<SPAN class="punctuation token">,</SPAN> input_folder<SPAN class="punctuation token">,</SPAN> out_coord<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="comment token"># return shapefiles in Directory</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>env<SPAN class="punctuation token">.</SPAN>workspace <SPAN class="operator token">=</SPAN> out_gdb
shp_pattern <SPAN class="operator token">=</SPAN> <SPAN class="string token">"{0}\\**\\*{1}"</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN>input_folder<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"*.shp"</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">for</SPAN> filename <SPAN class="keyword token">in</SPAN> glob2<SPAN class="punctuation token">.</SPAN>iglob<SPAN class="punctuation token">(</SPAN>shp_pattern<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="keyword token">try</SPAN><SPAN class="punctuation token">:</SPAN>
shp_records <SPAN class="operator token">=</SPAN> int<SPAN class="punctuation token">(</SPAN>arcpy<SPAN class="punctuation token">.</SPAN>GetCount_management<SPAN class="punctuation token">(</SPAN>filename<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN>getOutput<SPAN class="punctuation token">(</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">if</SPAN> shp_records <SPAN class="operator token">></SPAN> <SPAN class="number token">0</SPAN><SPAN class="punctuation token">:</SPAN>
sr<SPAN class="punctuation token">,</SPAN> transf <SPAN class="operator token">=</SPAN> projections<SPAN class="punctuation token">(</SPAN>filename<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">if</SPAN> sr<SPAN class="punctuation token">.</SPAN>type <SPAN class="operator token">!=</SPAN> <SPAN class="string token">"Unknown"</SPAN><SPAN class="punctuation token">:</SPAN>
fcs_name <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>ValidateTableName<SPAN class="punctuation token">(</SPAN>str<SPAN class="punctuation token">(</SPAN>Path<SPAN class="punctuation token">(</SPAN>filename<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN>stem<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
out_dataset <SPAN class="operator token">=</SPAN> <SPAN class="string token">"{0}\\{1}"</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN>out_gdb<SPAN class="punctuation token">,</SPAN> fcs_name<SPAN class="punctuation token">.</SPAN>title<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>AddMessage<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Projecting {0}"</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN>fcs_name<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>Project_management<SPAN class="punctuation token">(</SPAN>filename<SPAN class="punctuation token">,</SPAN> out_dataset<SPAN class="punctuation token">,</SPAN> out_coord<SPAN class="punctuation token">,</SPAN> transform_method<SPAN class="operator token">=</SPAN>transf<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">except</SPAN> <SPAN class="punctuation token">(</SPAN>RuntimeError<SPAN class="punctuation token">,</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>ExecuteError<SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">as</SPAN> e<SPAN class="punctuation token">:</SPAN>
<SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN>e<SPAN class="punctuation token">)</SPAN>
reproject_shp<SPAN class="punctuation token">(</SPAN>out_gdb<SPAN class="punctuation token">,</SPAN> input_folder<SPAN class="punctuation token">,</SPAN> out_coord<SPAN class="punctuation token">)</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>