csv.py: allow for multiline values

This commit is contained in:
2023-04-29 01:29:10 +02:00
parent 4e45563bb4
commit 575788ec9a

View File

@ -7,6 +7,8 @@ import datetime
RE_INT = re.compile(r'-?[0-9]+')
RE_FLOAT = re.compile(r'-?[0-9]+\.[0-9]+')
RE_STR_START = re.compile(r'.*;"[^"]*$')
RE_STR_END = re.compile(r'^[^"]*";.*')
def cast_value(value: str) -> Any:
@ -73,7 +75,18 @@ def parse(filename: str) -> Iterator[Tuple]:
with open(filename, 'r', encoding='utf-8') as f:
lines = f.__iter__()
yield tuple([part.strip() for part in next(lines).split(';')])
for line in lines:
in_str = False
for cur_line in lines:
if in_str:
line += cur_line
if not RE_STR_END.match(cur_line):
continue
in_str = False
else:
line = cur_line
if RE_STR_START.match(cur_line):
in_str = True
continue
yield tuple([cast_value(part) for part in parse_line(line)])