RSGISLib Utility Tools
Unique Value
- rsgislib.tools.utils.uid_generator(size: int = 6) str
A function which will generate a ‘random’ string of the specified length based on the UUID
- Parameters:
size – the length of the returned string.
- Returns:
string of length size.
Text File I/O
- rsgislib.tools.utils.read_text_file(input_file: str) str
Read a text file into a single string.
- Parameters:
input_file – File path to the input file.
- Returns:
string
- rsgislib.tools.utils.read_text_file_no_new_lines(input_file: str) str
Read a text file into a single string removing new lines.
- Parameters:
input_file – File path to the input file.
- Returns:
string
- rsgislib.tools.utils.read_text_file_to_list(input_file: str, include_empty_lines: bool = False) List
Read a text file into a list where each line is an element in the list.
- Parameters:
input_file – File path to the input file.
include_empty_lines – Include empty lines within the line (Default: False)
- Returns:
list
- rsgislib.tools.utils.write_list_to_file(data_lst: List, out_file: str)
Write a list a text file, one line per item.
- Parameters:
data_lst – List of values to be written to the output file.
out_file – File path to the output file.
- rsgislib.tools.utils.write_data_to_file(data_val, out_file: str)
Write some data (a string or can be converted to a string using str(data_val) to an output text file.
- Parameters:
data_val – Data to be written to the output file.
out_file – File path to the output file.
- rsgislib.tools.utils.create_ascii_text_file(input_file: str, output_file: str)
A function which will ensure that an input text file will only have ascii characters. Non-ascii characters will be removed.
- Parameters:
input_file – input file path
output_file – output file path
- rsgislib.tools.utils.prettify_xml_file(input_file: str, output_file: str)
A function which prettifies an XML file - i.e., inserts new lines and tabs.
- Parameters:
input_file – The input file path.
output_file – The output file path.
JSON File I/O
- rsgislib.tools.utils.write_dict_to_json(data_dict: Dict, out_file: str)
Write some data to a JSON file. The data would commonly be structured as a dict but could also be a list.
- Parameters:
data_dict – The dict (or list) to be written to the output JSON file.
out_file – The file path to the output file.
- rsgislib.tools.utils.write_dict_to_json_gz(data_dict: Dict, out_file: str, encoding: str = 'utf-8')
Write some data to a JSON file compressed with gzip. The data would commonly be structured as a dict but could also be a list.
- Parameters:
data_dict – The dict (or list) to be written to the output JSON file.
out_file – The file path to the output file.
encoding – the character set encoding (default: utf-8)
- rsgislib.tools.utils.read_json_to_dict(input_file: str) Dict
Read a JSON file. Will return a list or dict.
- Parameters:
input_file – input JSON file path.
- rsgislib.tools.utils.read_gz_json_to_dict(input_file: str, encoding: str = 'utf-8') Dict
Read a JSON file. Will return a list or dict.
- Parameters:
input_file – input JSON file path.
encoding – the character set encoding (default: utf-8)
Parse Dict/JSON
- rsgislib.tools.utils.dict_to_json_str(data_dict: Dict) str
Write some data to a JSON file. The data would commonly be structured as a dict but could also be a list.
- Parameters:
data_dict – The dict (or list) to be written to the output JSON file.
out_file – The file path to the output file.
- rsgislib.tools.utils.dict_struct_does_path_exist(dict_struct_obj: Dict, tree_sequence: List) bool
A function which tests whether a path exists within JSON file.
- Parameters:
dict_struct_obj – the structure of dicts (i.e., JSON) to be searched
tree_sequence – list of strings specifying the path within the structure
- Returns:
boolean
- rsgislib.tools.utils.dict_struct_get_str_value(dict_struct_obj: Dict, tree_sequence: List, valid_values: List = None) str
A function which retrieves a single string value from a JSON structure.
- Parameters:
dict_struct_obj – the structure of dicts (i.e., JSON) to be searched
tree_sequence – list of strings specifying the path within the structure
valid_values – An optional list of valid values. An exception will be thrown if a list is provided and the string value found is not within the list.
- Returns:
the string value at the path provided.
- rsgislib.tools.utils.dict_struct_get_boolean_value(dict_struct_obj: Dict, tree_sequence: List) bool
A function which retrieves a single boolean value from a JSON structure.
- Parameters:
dict_struct_obj – the structure of dicts (i.e., JSON) to be searched
tree_sequence – list of strings specifying the path within the structure
- Returns:
boolean value.
- rsgislib.tools.utils.dict_struct_get_date_value(dict_struct_obj: Dict, tree_sequence: List, date_format: str = '%Y-%m-%d') datetime
A function which retrieves a single date value from a JSON structure.
- Parameters:
dict_struct_obj – the structure of dicts (i.e., JSON) to be searched
tree_sequence – list of strings specifying the path within the structure
date_format – a string or list of strings for the date/time format to be parsed by datetime.datetime.strptime.
- Returns:
a date object with the value at the path specified.
- rsgislib.tools.utils.dict_struct_get_datetime_value(dict_struct_obj: Dict, tree_sequence: List, date_time_format: str = '%Y-%m-%dT%H:%M:%S.%f')
A function which retrieves a single date value from a JSON structure.
- Parameters:
dict_struct_obj – the structure of dicts (i.e., JSON) to be searched
tree_sequence – list of strings specifying the path within the structure
date_time_format – a string or list of strings for the date/time format to be parsed by datetime.datetime.strptime.
- Returns:
datetime object with the value at the path provided.
- rsgislib.tools.utils.dict_struct_get_str_list_value(dict_struct_obj: Dict, tree_sequence: List, valid_values: List = None) List[str]
A function which retrieves a list of string values from a JSON structure.
- Parameters:
dict_struct_obj – the structure of dicts (i.e., JSON) to be searched
tree_sequence – list of strings specifying the path within the structure
valid_values – An optional list of valid values. An exception will be thrown if a list is provided and a string value found is not within the list.
- Returns:
list of strings
- rsgislib.tools.utils.dict_struct_get_numeric_value(dict_struct_obj: Dict, tree_sequence: List, valid_lower: float = None, valid_upper: float = None) int | float
A function which retrieves a single numeric value from a JSON structure.
- Parameters:
dict_struct_obj – the structure of dicts (i.e., JSON) to be searched
tree_sequence – list of strings specifying the path within the structure
valid_lower – optional lower valid bounds, error throw if outside the bounds.
valid_upper – optional upper valid bounds, error throw if outside the bounds.
- Returns:
numeric value at path
- rsgislib.tools.utils.dict_struct_get_list_value(dict_struct_obj: Dict, tree_sequence: List) List
A function which retrieves a list of values from a JSON structure.
- Parameters:
dict_struct_obj – the structure of dicts (i.e., JSON) to be searched
tree_sequence – list of strings specifying the path within the structure
- Returns:
list of values
Strings
- rsgislib.tools.utils.zero_pad_num_str(num_val: float, str_len: int = 3, round_num: bool = False, round_n_digts: int = 0, integerise: bool = False, absolute: bool = False, gain: float = 1) str
A function which zero pads a number to make a string
- Parameters:
num_val – number value to be processed.
str_len – the number of characters in the output string.
round_num – boolean whether to round the input number value.
round_n_digts – If rounding, the number of digits following decimal points to round to.
integerise – boolean whether to integerise the input number
absolute – make number positive.
gain – apply a gain before integerising.
- Returns:
string with the padded numeric value.
- rsgislib.tools.utils.remove_repeated_chars(str_val: str, repeat_char: str) str
A function which removes repeated characters within a string for the specified character
- Parameters:
str_val – The input string.
repeat_char – The character
- Returns:
string without repeat_char
- rsgislib.tools.utils.check_str(str_val: str, rm_non_ascii: bool = False, rm_dashs: bool = False, rm_spaces: bool = False, rm_punc: bool = False) str
A function which can check a string removing spaces (replaced with underscores), remove punctuation and any non ascii characters.
- Parameters:
str_val – the input string to be processed.
rm_non_ascii – If True (default False) remove any non-ascii characters from the string
rm_dashs – If True (default False) remove any dashes from the string and replace with underscores.
rm_spaces – If True (default False) remove any spaces from the string.
rm_punc – If True (default False) remove any punctuation (other than ‘_’ or ‘-’) from the string.
- Returns:
returns a string outputted from the processing.
Encode String
- rsgislib.tools.utils.encode_base64_text(input_txt: str) str
A function which encoded the input text using base64 into bytes. Useful for storing passwords in configure files, which while not secure means they cannot just be read as plain text.
- Parameters:
plain_txt – The input string to be encoded
- Returns:
Output encoded string.
- rsgislib.tools.utils.decode_base64_text(in_encoded_txt: str) str
A function which decoded text encoded using the encode_base64_text function.
- Parameters:
in_encoded_txt – Input encoded byte string (i.e., encoded using the encode_base64_text function).
- Returns:
Output plain text string
- rsgislib.tools.utils.create_username_password_file(username: str, password: str, out_file: str)
A function which will create a username/password file where the username and password are encoded using base64 so the information is not stored in plain text - note this is note ‘secure’ just means that someone cannot just read the plain text username and password.
- Parameters:
username – string with the username
password – string with the password
out_file – output file path.
- rsgislib.tools.utils.get_username_password(input_file: str) -> (<class 'str'>, <class 'str'>)
A function which retrieves a username and password from an input file where the data has been encoded with base64.
- Parameters:
input_file – input file path.
- Returns:
plain text username and password
Numeric
- rsgislib.tools.utils.is_number(str_val: str) bool
A function which tests whether the input string contains a number of not.
- Returns:
boolean
- rsgislib.tools.utils.in_bounds(x: array, lower: float, upper: float, upper_strict: bool = False) bool
Checks whether a value or array of values is within specified bounds.
- Parameters:
x – value or numpy array of values to check.
lower – lower bound
upper – upper bound
upper_strict – True is less than upper; False is less than equal to upper
- Returns:
boolean
- rsgislib.tools.utils.mixed_signs(x: array) bool
Check whether an array of numbers has a mix of positive and negative values.
- Parameters:
x – list of values.
- Returns:
boolean
- rsgislib.tools.utils.negative(x: array) bool
Is the maximum number in the list negative. :param x: list of values
- Returns:
boolean
- rsgislib.tools.utils.is_odd(number: float) bool
A function which tests whether a number is odd
- Parameters:
number – number value to test.
- Returns:
True = input number is odd; False = input number is even
Colours
- rsgislib.tools.utils.hex_to_rgb(hex_str: str) -> (<class 'int'>, <class 'int'>, <class 'int'>)
A function which converts an hexadecimal colour representation to RGB values between 0 and 255.
For example: #b432be is equal to: 180, 50, 190
- Parameters:
hex_str – Input hex string which can be either 7 or 6 characters long. If 7 characters then the first character will be a #.
- Returns:
R, G, B tuple
import rsgislib.tools.utils r, g, b = rsgislib.tools.utils.hex_to_rgb("#b432be")
- rsgislib.tools.utils.rgb_to_hex(r: int | float, g: int | float, b: int | float, normalised: bool = False) str
A function which converts red, green, blue values to a hexadecimal colour representation.
For example: 180, 50, 190 is equal to: #b432be
- Parameters:
r – number with range either 0-255 or 0-1 if normalised
g – number with range either 0-255 or 0-1 if normalised
b – number with range either 0-255 or 0-1 if normalised
normalised – a boolean specifying the inputs are in range 0-1
- Returns:
string with hexadecimal colour representation
Dates
- rsgislib.tools.utils.get_days_since(year: int, day_of_year: int, base_date: date) int
Calculate the number of days from a base data to a defined year/day.
- Parameters:
year – int with year XXXX (e.g., 2020)
day_of_year – int with the day within the year (1-365)
base_date – a datetime.date object
- Returns:
int (n days)
- rsgislib.tools.utils.get_days_since_date(year: int, month: int, day, base_date: date) int
Calculate the number of days from a base data to a defined year/day.
- Parameters:
year – int with year XXXX (e.g., 2020)
month – int month in year (1-12) (e.g., 6)
day – int with the day within the month (1-31) (e.g., 20)
base_date – a datetime.date object
- Returns:
int (n days)
- rsgislib.tools.utils.find_month_end_date(year: int, month: int) int
A function which returns the date of the last day of the month.
- Parameters:
year – int for the year (e.g., 2019)
month – month (e.g., 9)
- Returns:
last day of the month date
- rsgislib.tools.utils.get_datetime_increment_lst(start_date: datetime, end_date: datetime, interval: timedelta) List[datetime]
A function which returns a list of datetime objects from the start date in steps of the interval until the date is greater than the end date.
- Parameters:
start_date – the start datetime of the sequence
end_date – the end datetime of the sequence
interval – the interval as a timedelta object.
- Returns:
List of datetime objects
- rsgislib.tools.utils.is_summer_winter(lat: float, date: date) int
A function which returns an integer specifying whether the date provided is within the summer or winter for a given latitude.
Southern Hemisphere Winter: May - November Northern Hemisphere Winter: March - October
- Parameters:
lat – float for the latitude
date – a datetime.date object
- Returns:
int (1 == summer; 2 == winter)
- rsgislib.tools.utils.create_year_month_start_end_lst(start_year: int, start_month: int, end_year: int, end_month: int) List[Tuple[int, int]]
A function which creates a list of year and month tuples from a start and end month and year.
- Parameters:
start_year – int with the start year
start_month – int with the start month
end_year – int with the end year
end_month – int with the end month
- Returns:
List of tuples (year, month)
- rsgislib.tools.utils.create_year_month_n_months_lst(start_year: int, start_month: int, n_months: int) List[Tuple[int, int]]
A function which creates a list of year and month tuples from a start and end month and year.
- Parameters:
start_year – int with the start year
start_month – int with the start month
n_months – int with the number of months ahead
- Returns:
List of tuples (year, month)
Powerset
- rsgislib.tools.utils.powerset_iter(in_set: List)
A function which returns an iterator (generator) for all the subsets of the inputted set (i.e., the powerset)
- Params inset:
the input set for which the powerset will be produced
- rsgislib.tools.utils.powerset_lst(in_set: List, min_items: int = 0) List
A function which returns a list for all the subsets of the inputted set (i.e., the powerset)
- Params inset:
the input set for which the powerset will be produced
- Params min_items:
Optional parameter specifying the minimum number of items in the output sets. If 0 or below then ignored. Default is 0.
- rsgislib.tools.utils.create_var_list(in_vals_lsts: Dict, val_dict: Dict = None) List[Dict]
A function which will produce a list of dictionaries with all the combinations of the input variables listed (i.e., the powerset).
- Parameters:
in_vals_lsts – dictionary with each value having a list of values.
val_dict – variable used in iterative nature of function which lists the variable for which are still to be looped through. Would normally not be provided by the user as default is None. Be careful if you set as otherwise you might not get a correct or valid result.
- Returns:
list of dictionaries with the same keys are the input but only a single value will be associate with key rather than a list.
import rsgislib.tools.utils seg_vars_ranges = dict() seg_vars_ranges['k'] = [5, 10, 20, 30, 40, 50, 60, 80, 100, 120] seg_vars_ranges['d'] = [10, 20, 50, 100, 200, 1000, 10000] seg_vars_ranges['minsize'] = [5, 10, 20, 50, 100, 200] seg_vars = rsgislib.tools.utils.create_var_list(seg_vars_ranges)
Compute Environment
- rsgislib.tools.utils.get_environment_variable(var: str) str
A function to get an environmental variable, if variable is not present returns None.
- Parameters:
var – the name of the environmental variable to get the value for.
- Returns:
value of env var.
- rsgislib.tools.utils.num_process_cores() int
A functions which returns the number of processing cores available on the machine
- Returns:
int