Source code for idmtools_calibra.utilities.parsers.bin2np

import numpy as np


# parse a binary numeric file
#
# if dtype is not None, try constructing an array from 
# text/binary file containing numbers of type dtype (e.g. floats)
# by default read the whole file;
# 
# if dtype and sep are not None read a text file containing numbers separated 
# by sep
# note that providing dtype leads to more efficient file load 
#
# if dtype is None just load the data from a pickled/.npy/.npz file
# see http://docs.scipy.org/doc/numpy/reference/generated/numpy.load.html
# 
# if func is not None
# func must be a truth assignment function mapping each LINE in a TEXT file to a tuple (boolean, boolean)
# each number in the file is separated by sep; if sep is None the default delimiter is white space
# all parsed numbers are treated as floats at present
# if func returns 
#    (True, True): the value in the file is read and the parsing continues
#    (True, False): the value in the file is read and the parsing stops
#    (False, True): the value in the file is skipped and the parsing continues
#    (False, False): the value in the file is skipped and the parsing stops


[docs]def filter_generator(src, func, sep=" "): for line in src: xs = line.split(sep) for x in xs: read, goon = func(float(x)) if not read and not goon: return if read and not goon: yield x return if read and goon: yield x if not read and goon: pass
[docs]def bin2np(src, func=None, sep=" "): if func is not None: with open(src) as f: return np.genfromtxt(filter_generator(f, func, sep)) else: return np.load(src)