This is modified version of [TLousky][1] [answer][2] in this script we use three factors to decide merging edges : 

  - distance between their centers.
  - difference in length.
  - the angle between these edges.

you can drop any of them if it's not necessary in your scene, and this is the script :

------

    import bpy, bmesh
    from math import sin
    
    bm = bmesh.from_edit_mesh( bpy.context.object.data )
    bm.edges.ensure_lookup_table()
    
    lt = 0.2 #length difference + -
    dt = 0.2  #max distance 
    at = 0.16  #max sin(angle)  (30°)
    
    center  = lambda e : ( e.verts[0].co + e.verts[1].co ) / 2
    length  = lambda e : ( e.verts[0].co - e.verts[1].co ).length
    dist    = lambda v1, v2: (  v2 -  v1 ).length
    sinAngle   = lambda e1, e2: abs(sin((e1.verts[1].co - e1.verts[0].co).angle(e2.verts[1].co - e2.verts[0].co))) 
    
    i =-1
    while i < len(bm.edges)-1:
        i +=1
        e = bm.edges[i]
        i = e.index 
        l = length(e)
        lmin = l-lt
        lmax = l+lt
        c = center(e)
        for oe in  bm.edges[i+1:]:
            if  lmin < length(oe) < lmax  and dist( center(oe), c) < dt and sinAngle(e, oe)<at :
                ev1, ev2 = e.verts[:]
                oev1, oev2 = oe.verts[:]
                print( ev2, oev2 )
                if dist(ev1.co, oev1.co ) < dist(ev1.co, oev2.co ) :
                    if ev1 != oev1 : bmesh.ops.pointmerge( bm, verts = [ ev1, oev1 ], merge_co = ev1.co )
                    if ev2 != oev2 : bmesh.ops.pointmerge( bm, verts = [ ev2, oev2 ], merge_co = ev2.co )
                else :
                    if ev1 != oev2 : bmesh.ops.pointmerge( bm, verts = [ ev1, oev2 ], merge_co = ev1.co )
                    if ev2 != oev1 : bmesh.ops.pointmerge( bm, verts = [ ev2, oev1 ], merge_co = ev2.co )
                bm.edges.ensure_lookup_table()
                i=-1
                break    
    
    bmesh.update_edit_mesh(bpy.context.object.data ,True)

  [1]: https://blender.stackexchange.com/users/15861/tlousky
  [2]: https://blender.stackexchange.com/a/50354/5113