オブジェクトを連結した部分で分割する

[ctrl+l]と[p](Selection)を割れなくなるまで繰り返す。

import bpy

s=bpy.context.scene

o=s.objects.active


def separate_object(o):
	if o.type!='MESH':
		return
	m=o.data
	
	# deselect all
	bpy.ops.object.mode_set(mode='EDIT', toggle=False)
	bpy.ops.mesh.select_all(action='DESELECT')
	bpy.ops.object.mode_set(mode='OBJECT', toggle=False)		

	while True:
		if len(m.verts)==0:
			break
		print(len(m.verts))
		
		# select first
		m.verts[0].select=True
		# select linked	
		bpy.ops.object.mode_set(mode='EDIT', toggle=False)
		bpy.ops.mesh.select_linked()
		bpy.ops.object.mode_set(mode='OBJECT', toggle=False)
		
		if m.total_vert_sel==len(m.verts):
			break

		bpy.ops.object.mode_set(mode='EDIT', toggle=False)
		bpy.ops.mesh.separate(type='SELECTED')
		bpy.ops.object.mode_set(mode='OBJECT', toggle=False)			
	
separate_object(o)