Is it possible to do this without saving to a file? |
Yes, you can use the arcpy shape method .projectAs(). This can be tricky but should work great!
projectAs (spatial_reference, {transformation_name})
Projects a geometry and optionally applies a geotransformation.
To project, the geometry needs to have a spatial reference, and not have an UnknownCoordinateSystem. The new spatial reference system passed to the method defines the output coordinate system. If either spatial reference is unknown the coordinates will not be changed. The Z- and measure values are not changed by the ProjectAs method.
Point—Help | ArcGIS for Desktop
PointGeometry—Help | ArcGIS for Desktop
I also highly recommend using WKID numbers instead of those long coordinate system names which are easy to misspell. A very easy place to look them up is http://spatialreference.org.
Note this is untested code:
import arcpy
inputSRS = arcpy.SpatialReference(7405) # British National Grid
outputSRS = arcpy.SpatialReference(4326) # GCS WGS84
gt = 'OSGB_1936_To_WGS_1984_Petroleum'
pt = arcpy.Point()
pt.X = 210000
pt.Y = 310000
print "Input XY: {} {}".format(pt.X, pt.Y)
ptgeo = arcpy.PointGeometry(pt, inputSRS)
ptgeo1 = ptgeo.projectAs(outputSRS, gt)
pt1 = ptgeo1.lastPoint
print "Output XY: {} {}".format(pt1.X, pt1.Y)