nodeslicer/infra/csv_handling.py

24 lines
No EOL
883 B
Python

from functools import lru_cache
import csv
import os
@lru_cache(maxsize=128)
def _load_csv(filename: str, mtime: float, encoding: str | None = None) -> tuple[tuple[str, ...], ...]:
with open(filename, 'r', newline='', encoding=encoding) as f:
reader = csv.reader(f)
return tuple(tuple(row) for row in reader)
def parse_csv_to_tuples(filename: str) -> list[tuple[str, ...]]:
current_mtime = os.path.getmtime(filename)
data: tuple[tuple[str, ...], ...] = _load_csv(filename, current_mtime)
return sorted(data, key=lambda x: x[1])
def parse_csv_to_dict(filename: str) -> dict[str, list[str]]:
current_mtime = os.path.getmtime(filename)
data: tuple[tuple[str, ...], ...] = _load_csv(filename, current_mtime, encoding='utf-8-sig')
result = {}
for row in data:
if row:
result[row[0]] = list(row[1:])
return result