Source code for foxes.data.parse
from pathlib import Path
import warnings
[docs]
def parse_Pct_file_name(file_name):
"""
Parse basic turbine data from file name
Expected format: `[name]-[...]MW-D[...]-H[...].csv`
Parameters
----------
file_name: str or pathlib.Path
Path to the file
Returns
-------
parsed_data: dict
dict with data parsed from file name
:group: data
"""
sname = Path(file_name).stem
pars = {"name": sname.split(".")[0]}
i = sname.find(".")
if i >= 0:
if "-" in sname[i:]:
warnings.warn(
f"Illegal use of '.' in '{sname}', please replace by 'd' for float value dots. Parsing stopped."
)
return pars
if "-" in sname and "_" in sname:
warnings.warn(
f"Illegal file name '{file_name}': Contains both '-' and '_'. Parsing stopped."
)
return pars
if "-" in sname:
pieces = sname.split("-")
elif "_" in sname:
pieces = sname.split("_")
pars["name"] = pieces[0]
pieces = pieces[1:]
for p in pieces:
if p[-1] == "W":
if p[-2] == "k":
pars["P_nominal"] = float(p[:-2].replace("d", "."))
elif p[-2] == "M":
pars["P_nominal"] = 1.0e3 * float(p[:-2].replace("d", "."))
elif p[-2] == "G":
pars["P_nominal"] = 1.0e6 * float(p[:-2].replace("d", "."))
else:
pars["P_nominal"] = 1.0e-3 * float(p[:-1].replace("d", "."))
pars["name"] += "-" + p
elif p[0] == "D":
pars["D"] = float(p[1:].replace("d", "."))
elif p[0] == "H":
pars["H"] = float(p[1:].replace("d", "."))
else:
pars["name"] += "-" + p
return pars
[docs]
def parse_Pct_two_files(file_name_A, file_name_B):
"""
Parse basic turbine data from file names
Expected format: `[name]-[...]MW-D[...]-H[...].csv`
Parameters
----------
file_name_A: str or pathlib.Path
Path to the first file
file_name_B: str or pathlib.Path
Path to the second file
Returns
-------
parsed_data: dict
dict with data parsed from file name
:group: data
"""
pars_A = parse_Pct_file_name(file_name_A)
pars_B = parse_Pct_file_name(file_name_B)
name = pars_A["name"]
name_ct = pars_B["name"]
i = 0
while len(name) > i and len(name_ct) > i and name[i] == name_ct[i]:
i += 1
if i > 0 and name[i - 1] == "-":
i -= 1
if i < 1:
raise ValueError(
f"Turbine type name not deducible. From file A: '{name}', from file B: '{name_ct}'"
)
pars_A["name"] = name[:i]
pars_B["name"] = name[:i]
if pars_A != pars_B:
raise ValueError(
f"Data parsing from file names failed. File '{file_name_A}' gave '{pars_A}', file '{file_name_B}' gave '{pars_B}'"
)
return pars_A