24 lines
No EOL
883 B
Python
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 |