from difflib import context_diff, unified_diff def bytes_diff(a, b, fromfile=b'', tofile=b'', fromfiledate='', tofiledate='', n=3, lineterm='\n', *, dtype='unified'): def decode(s): return s.decode('ascii', 'surrogateescape') a = list(map(decode, a)) b = list(map(decode, b)) fromfile = decode(fromfile) # could be made conditional tofile = decode(tofile) # ditto meth = unified_diff if dtype == 'unified' else context_diff for line in meth(a,b,fromfile,tofile, fromfiledate,tofiledate,n,lineterm): yield line.encode('ascii', 'surrogateescape') if __name__ == '__main__': a = [b'a', b'b', b'c'] b = [b'b', b'd', b'c', b'e'] for line in bytes_diff(a, b): print(line) print() for line in bytes_diff(a, b, dtype='context'): print(line) # prints '''\ b'--- \n' b'+++ \n' b'@@ -1,3 +1,4 @@\n' b'-a' b' b' b'+d' b' c' b'+e' b'*** \n' b'--- \n' b'***************\n' b'*** 1,3 ****\n' b'- a' b' b' b' c' b'--- 1,4 ----\n' b' b' b'+ d' b' c' b'+ e' '''