Source code for ewoksid22.utils.spec

import os
from typing import Dict
from typing import List
from typing import Tuple


[docs] def saved_scan_numbers(filename: str) -> List[int]: saved = [] if os.path.isfile(filename): with open(filename, "r") as f: for line in f: if "#S" in line: saved.append(int(line.split()[1])) return saved
[docs] def read_spec_file(filename: str) -> Tuple[List[str], Dict[int, List[str]]]: header = [] scans = dict() if not os.path.isfile(filename): return header, scans current_scan = None current_lines = [] with open(filename, "r") as f: for line in f: if line.startswith("#S"): if current_scan is not None: scans[current_scan] = current_lines current_scan = int(line.split()[1]) current_lines = [line] else: if current_scan is None: header.append(line) else: current_lines.append(line) if current_scan is not None: scans[current_scan] = current_lines return header, scans
[docs] def write_spec_file( filename: str, header: List[str], scans: Dict[int, List[str]] ) -> None: dirname = os.path.dirname(filename) if dirname: os.makedirs(dirname, exist_ok=True) with open(filename, "w") as f: f.writelines(header) for _, lines in sorted(scans.items()): f.writelines(lines)
[docs] def append_spec_file(filename: str, scans: Dict[int, List[str]]) -> None: if not os.path.exists(filename): raise FileNotFoundError(filename) with open(filename, "a") as f: for _, lines in sorted(scans.items()): f.writelines(lines)