xtbf.parsers

 1def _test_partial_charges() -> str:
 2    return """
 3    HL-Gap            0.4164018 Eh           11.3309 eV
 4    Fermi-level           -0.1811489 Eh           -4.9293 eV
 5
 6     #   Z          covCN         q      C6AA      α(0)
 7     1   6 C        3.753    -0.106    22.589     6.778
 8     2   6 C        3.798    -0.064    21.737     6.638
 9     3   6 C        3.697     0.080    19.407     6.301
10     4   8 O        1.701    -0.319    19.336     5.937
11     5   6 C        3.696     0.088    19.284     6.282
12
13    """
14
15def partial_charges(s:str):
16    """
17    Reads partial charges from 
18    the given xtb output string.
19
20    >>> partial_charges(_test_partial_charges())
21    [[-0.106, -0.064, 0.08, -0.319, 0.088]]
22    """
23    header = "#   Z          covCN         q      C6AA      α(0)"
24    parsing = False
25    all_rslt = []
26    rslt = []
27    for lne in s.split("\n"):
28        lne = lne.strip()
29        if lne == header:
30            parsing = True
31            continue
32        if not lne.strip():
33            parsing = False
34            if rslt:
35                all_rslt.append(rslt)
36            rslt = []
37        if parsing:
38            lne = lne.strip().split()
39            rslt.append(
40                float(lne[4])
41            )
42    return all_rslt
def partial_charges(s: str):
17def partial_charges(s:str):
18    """
19    Reads partial charges from 
20    the given xtb output string.
21
22    >>> partial_charges(_test_partial_charges())
23    [[-0.106, -0.064, 0.08, -0.319, 0.088]]
24    """
25    header = "#   Z          covCN         q      C6AA      α(0)"
26    parsing = False
27    all_rslt = []
28    rslt = []
29    for lne in s.split("\n"):
30        lne = lne.strip()
31        if lne == header:
32            parsing = True
33            continue
34        if not lne.strip():
35            parsing = False
36            if rslt:
37                all_rslt.append(rslt)
38            rslt = []
39        if parsing:
40            lne = lne.strip().split()
41            rslt.append(
42                float(lne[4])
43            )
44    return all_rslt

Reads partial charges from the given xtb output string.

>>> partial_charges(_test_partial_charges())
[[-0.106, -0.064, 0.08, -0.319, 0.088]]