Source code for sirepo.csv

"""wrappers to Python csv

:copyright: Copyright (c) 2024 RadiaSoft LLC.  All Rights Reserved.
:license: http://www.apache.org/licenses/LICENSE-2.0.html
"""

from pykern.pkcollections import PKDict
from pykern.pkdebug import pkdc, pkdlog, pkdp
import csv
import re

_ENCODINGS = ("cp1252", "utf-8", "utf-8-sig")


[docs] def open_csv(path, encoding="utf-8"): with open(str(path), "rt", encoding=encoding) as f: for r in csv.reader(f): yield r
[docs] def read_as_number_list(path): try: return read_as_list(path, data_type=float) except ValueError as e: raise RuntimeError(f'invalid file "{path.basename}" err={e}')
[docs] def read_as_list(path, data_type=str): for e in _ENCODINGS: skip_header = data_type != str try: res = [] for r in open_csv(path, encoding=e): if skip_header and len(r) and re.search(r"[A-Za-z]", r[0]): skip_header = False continue res.append([data_type(c) for c in r]) return res except (TypeError, UnicodeDecodeError, ValueError): pkdlog("file={} cannot be read with encoding {}", path.basename, e) raise RuntimeError(f'invalid file "{path.basename}"')