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)