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