I suggest you use difflib.SequenceMatcher followed by get_matching_blocks
>>> p1, p2 = "/root/d1/d2/d1/d2","d2/d1/d2/file.txt" >>> sm = difflib.SequenceMatcher(None,p1, p2) >>> size = sm.get_matching_blocks()[0].size >>> path = p1 + p2[size:] >>> path '/root/d1/d2/d1/d2/file.txt'
Ans General Solution
def join_overlapping_path(p1, p2): sm = difflib.SequenceMatcher(None,p1, p2) p1i, p2i, size = sm.get_matching_blocks()[0] if not p1i or not p2i: None p1, p2 = (p1, p2) if p2i == 0 else (p2, p1) size = sm.get_matching_blocks()[0].size return p1 + p2[size:]
Execution
>>> join_overlapping_path(p1, p2) '/root/d1/d2/d1/d2/file.txt' >>> join_overlapping_path(p2, p1) '/root/d1/d2/d1/d2/file.txt'
Abhijit
source share