this should do it in arcgis...
import arcpy, math, datetime, numpy
print ("starting")
start = datetime.datetime.now() # for calculating time of process
#setting the containers
midpoint = #put your file to be populated in here, make sure it already exists
polyline = #put your polyline file in here
#housekeeping
arcpy.DeleteFeatures_management(midpoint)
arcpy.env.overwriteOutput = True
#generating the mid point
with arcpy.da.SearchCursor(polyline, "SHAPE@") as in_cursor, \
arcpy.da.InsertCursor(midpoint, "SHAPE@") as out_cursor:
for row in in_cursor:
midpoint = row[0].positionAlongLine(0.50,True).firstPoint
out_cursor.insertRow([midpoint])
#tidy up
del rows, row, updateRows_midpoint, outRow, out_cursor, midpoint, polyline
print "Done in ",datetime.datetime.now() - start, " seconds"