There is an example in the SDK samples
http://resources.esri.com/help/9.3/arcgisdesktop/com/COM/ExtendAO/VertexLineSymbol.htm
Description
This project provides a custom symbol to draw a line and its vertices. Simple custom functionality is provided to alter both the symbol used to draw the basic shape of the line, and the symbol used to draw its vertices. A property page is also provided to allow users to edit the properties of the symbol using the user interface.
I've put together some code below which seems to create single segment lines from polyline (which can be multipart) feature classes while retaining their attributes.
I recommend that you run it against a small test dataset or two first, and if it seems to do what you want, then comment out or remove the print statements to gain some performance.
If you add this to a Python script tool then you should be able to use it in a model at either ArcGIS 10.1 or 10.2. Earlier versions will not be able to use it because I have included arcpy.da for performance.
import arcpy
inFC = r"C:\temp\testLines.shp"
outFC = r"C:\temp\testLinesSplit.shp"
if arcpy.Exists(outFC):
arcpy.Delete_management(outFC)
arcpy.CreateFeatureclass_management("C:/temp","testLinesSplit.shp","POLYLINE","#","DISABLED","DISABLED",inFC)
arcpy.AddField_management(outFC,"inFID","LONG","#","#","#","#","NULLABLE","NON_REQUIRED","#")
iCursor = arcpy.da.InsertCursor(outFC, ["inFID","SHAPE@"])
with arcpy.da.SearchCursor(inFC,["OID@", "SHAPE@"]) as sCursor:
for row in sCursor:
inFID = row[0]
# Print the current multipoint's ID
#
print("Feature {0}:".format(row[0]))
partnum = 0
# Step through each part of the feature
#
for part in row[1]:
# Print the part number
#
print("Part {0}:".format(partnum))
# Step through each vertex in the feature
#
prevX = None
prevY = None
for pnt in part:
if pnt:
# Print x,y coordinates of current point
#
print("{0}, {1}".format(pnt.X, pnt.Y))
if prevX:
array = arcpy.Array([arcpy.Point(prevX, prevY),
arcpy.Point(pnt.X, pnt.Y)])
polyline = arcpy.Polyline(array)
iCursor.insertRow([inFID,polyline])
prevX = pnt.X
prevY = pnt.Y
else:
# If pnt is None, this represents an interior ring
#
print("Interior Ring:")
partnum += 1
del iCursor
arcpy.JoinField_management(outFC,"inFID",inFC,"FID","#")
Best Answer
I seem to remember a few split line at vertex tools in the editing or advanced editing tools. There is one that will split lines at intersection and I think that's the name of it. I'd give better guidance but I'm not at my desk to see the tools in front of me.