Source code for bw2io.strategies.csv

# -*- coding: utf-8 -*-


[docs] def csv_restore_tuples(data): """Restore tuples separated by `::` string""" _ = lambda x: tuple(x.split("::")) if "::" in x else x for ds in data: for key, value in ds.items(): if isinstance(value, str): ds[key] = _(value) if key == "categories" and isinstance(ds[key], str): ds[key] = (ds[key],) for exc in ds.get("exchanges", []): for key, value in exc.items(): if isinstance(value, str): exc[key] = _(value) if key == "categories" and isinstance(exc[key], str): exc[key] = (exc[key],) return data
[docs] def csv_restore_booleans(data): """Turn `True` and `False` into proper booleans, where possible""" def _(x): if x.lower() == "true": return True elif x.lower() == "false": return False else: return x for ds in data: for key, value in ds.items(): if isinstance(value, str): ds[key] = _(value) for exc in ds.get("exchanges", []): for key, value in exc.items(): if isinstance(value, str): exc[key] = _(value) return data
[docs] def csv_numerize(data): """Turns strings into numbers where possible""" def _(x): try: return float(x) except: return x for ds in data: for key, value in ds.items(): if isinstance(value, str): ds[key] = _(value) for exc in ds.get("exchanges", []): for key, value in exc.items(): if isinstance(value, str): exc[key] = _(value) return data
[docs] def csv_drop_unknown(data): """Drop keys whose values are `(Unknown)`.""" _ = lambda x: None if x == "(Unknown)" else x data = [{k: v for k, v in ds.items() if v != "(Unknown)"} for ds in data] for ds in data: if "exchanges" in ds: ds["exchanges"] = [ {k: v for k, v in exc.items() if v != "(Unknown)"} for exc in ds["exchanges"] ] return data
[docs] def csv_add_missing_exchanges_section(data): for ds in data: if "exchanges" not in ds: ds["exchanges"] = [] return data