Parsing the numerical output from Sensovation SensoSpot image analysis.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

99 lines
2.4 KiB

""" Sensospot Data Parser
Parsing the numerical output from Sensovations Sensospot image analysis.
"""
__version__ = "0.6.1"
import sys
from pathlib import Path
import click
import pandas
from . import columns
from .parser import parse_file, parse_folder # noqa: F401
from .parameters import ExposureInfo # noqa: F401
DEFAULT_OUTPUT_FILENAME = "collected_data.csv"
@click.command()
@click.argument(
"source",
type=click.Path(
exists=True,
file_okay=False,
dir_okay=True,
readable=True,
writable=True,
),
)
@click.option(
"-o",
"--outfile",
default=DEFAULT_OUTPUT_FILENAME,
help=(
"Output file name, use a dash '-' for stdout, "
f"default: '{DEFAULT_OUTPUT_FILENAME}'"
),
)
@click.option(
"-q",
"--quiet",
is_flag=True,
default=False,
help="Ignore Sanity Check",
)
@click.option(
"-r",
"--recurse",
is_flag=True,
default=False,
help="Recurse into folders one level down",
)
def main(source, outfile, quiet=False, recurse=False):
if recurse:
_parse_recursive(source, outfile, quiet)
else:
_parse_one_folder(source, outfile, quiet)
def _output(data, folder, outfile):
"""output a datafarme to stdout or csv file
data: the pandas dataframe
folder: the folder to save the file to
outfile: the name of the outfile, '-' will output to stdout
"""
if outfile.strip() == "-":
data.to_csv(sys.stdout, sep="\t")
else:
csv_file = Path(folder) / outfile
data.to_csv(csv_file, sep="\t")
def _parse_one_folder(source, outfile, quiet):
"""parses the data of one folder"""
source_path = Path(source)
# read the raw data of a folder
raw_data = parse_folder(source_path, quiet=quiet)
_output(raw_data, source_path, outfile)
return raw_data
def _parse_recursive(source, outfile, quiet):
"""parses all folders one level down and collects the data"""
child_outfile = DEFAULT_OUTPUT_FILENAME
source_path = Path(source)
folders = (i for i in source_path.iterdir() if i.is_dir())
non_hidden = (i for i in folders if not i.name.startswith("."))
collection = (
_parse_one_folder(f, child_outfile, quiet) for f in non_hidden
)
try:
collected = pandas.concat(collection, ignore_index=True)
_output(collected.reset_index(), source_path, outfile)
except ValueError as e:
print(str(e))