pds4_tools.utils.helpers module¶
Functions¶
|
Cast given string value, if possible, to an int, float or returns unchanged. |
|
Array-like values are defined as those that implement __len__ (such as |
|
Obtain finite (non-NaN, non-Inf) minimum and maximum of an array. |
|
Recursively searches nested dictionaries. |
|
Transforms XML to an |
Details¶
- cast_int_float_string(value)[source]¶
Cast given string value, if possible, to an int, float or returns unchanged.
- Parameters:
- valuestr or unicode
Value to try casting to an int and float.
- Returns:
- int, float, str or unicode
Cast value.
- is_array_like(value)[source]¶
Array-like values are defined as those that implement __len__ (such as
list,tuple,array.array,np.ndarray, etc) but are notstr,unicodeorbytes.- Parameters:
- value
Any kind of value.
- Returns:
- bool
True if value is array-like, false otherwise.
- finite_min_max(array_like)[source]¶
Obtain finite (non-NaN, non-Inf) minimum and maximum of an array.
- Parameters:
- array_likearray_like
A numeric array of some kind, possibly containing NaN or Inf values.
- Returns:
- tuple
Two-valued tuple containing the finite minimum and maximum of array_like.
- dict_extract(nested_dict, key)[source]¶
Recursively searches nested dictionaries.
nested_dict may contain other dictionaries, or other array-like’s that have dictionaries inside: all dictionaries anywhere will be searched.
Adapted from http://stackoverflow.com/a/29652561.
- Parameters:
- nested_dictdict or OrderedDict
A dictionary potentially containing an arbitrary number of other dictionaries.
- keystr or unicode
The key to search for in nested_dict.
- Returns:
- generator
Found values for key in any dictionary inside nested_dict.
Notes
This code is generally efficient. However, if you pass it a dictionary that has a huge array nested within it, it will not be performant because it will try to search each value in the array for a dictionary (this is by design; the intent if non-dict array-like’s are present is to search them on the assumption they will be small where using this function makes sense).
Examples
>>> d = { "id" : "abcde", "key1" : "blah", "key2" : "blah blah", "nestedlist" : [ "blah blah", { "id" : "qwerty", "key1": "blah"} ] } >>> result = dict_extract(d, 'id')
>>> print(list(result)) ['abcde', 'qwerty']
- xml_to_dict(xml_element, skip_attributes=False, cast_values=False, cast_ignore=(), tag_modify=())[source]¶
Transforms XML to an
OrderedDict.Takes an XML
ElementTreeElement or aLabeland creates an equivalentOrderedDict. Keys of the dictionary represent tag names and values represent the text values of the elements. In case of a (sub)element having child elements, values will be anotherOrderedDict, inside which the text of the element has key ‘_text’. In case of (sub)elements having child elements with the same key, the value for the key will be alist. In case of (sub)elements with attributes, the value will be anOrderedDict, inside which the key for each attribute starts with ‘@’ and the text of the element has key ‘_text’. For text elements, the text value is not preserved (and a ‘_text’ key is not created) if it contains only whitespace (including spaces, tabs and newlines); otherwise whitespaces are preserved.Preserves order of elements in most cases. The exception is when an element has 2 or more sets of children, where each set has the same key names (i.e., there are at least 4 children, and 2 of those children have one key, and 2 have another key) and the order of the children with the non-matching keys is intertwined, in such a case the order of the intertwined keys will not be preserved.
Adapted from http://stackoverflow.com/a/10076823.
- Parameters:
- xml_element
ElementTreeElement or Label XML representation which will be turned into a dictionary.
- skip_attributesbool, optional
If True, skips adding attributes from XML. Defaults to False.
- cast_valuesbool, optional
If True, float and int compatible values of element text and attribute values will be cast as such in the output dictionary. Defaults to False.
- cast_ignoretuple[str or unicode], optional
If given, then a tuple of element tags and/or attribute names. If cast_values is True, then for elements and attributes matching exactly the values in this tuple, values will not be cast. Attribute names must be prepended by an ‘@’. If tag_modify is set, then tags and attribute names specified by cast_ignore should be the already tag modified versions. Empty by default.
- tag_modifytuple, optional
If given, then a 2-valued tuple with str or unicode values, or a tuple of 2-valued tuples. Any match, including partial, in element tag names and/or attributes names for each tag_modify[0] is replaced with tag_modify[1]. Empty by default.
- xml_element
- Returns:
- OrderedDict
Dictionary representation of the XML input.