import re
split_rule = re.compile("(?:\r\n)|(?:\r)|(?:\n)")
def converter(byte_data):
left_d = ""
for d in byte_data:
t = split_rule.split(left_d + d.decode())
last_index = len(t) - 1
for index, i in enumerate(t):
if not i:
continue
if index != last_index:
yield i
else:
left_d = i
else:
if left_d:
yield left_d
for i in (converter(iter((
b'a',
b'b,c\n',
b'd,e\n')))
):
print(repr(i))
aW1wb3J0IHJlCnNwbGl0X3J1bGUgPSByZS5jb21waWxlKCIoPzpcclxuKXwoPzpccil8KD86XG4pIikKCgpkZWYgY29udmVydGVyKGJ5dGVfZGF0YSk6CiAgICBsZWZ0X2QgPSAiIgogICAgZm9yIGQgaW4gYnl0ZV9kYXRhOgogICAgICAgIHQgPSBzcGxpdF9ydWxlLnNwbGl0KGxlZnRfZCArIGQuZGVjb2RlKCkpCiAgICAgICAgbGFzdF9pbmRleCA9IGxlbih0KSAtIDEKICAgICAgICBmb3IgaW5kZXgsIGkgaW4gZW51bWVyYXRlKHQpOgogICAgICAgICAgICBpZiBub3QgaToKICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgIGlmIGluZGV4ICE9IGxhc3RfaW5kZXg6CiAgICAgICAgICAgICAgICB5aWVsZCBpCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBsZWZ0X2QgPSBpCiAgICBlbHNlOgogICAgICAgIGlmIGxlZnRfZDoKICAgICAgICAgICAgeWllbGQgbGVmdF9kCgoKZm9yIGkgaW4gKGNvbnZlcnRlcihpdGVyKCgKICAgIGInYScsCiAgICBiJ2IsY1xuJywKICAgIGInZCxlXG4nKSkpCik6CiAgICBwcmludChyZXByKGkpKQ==