Last active
June 10, 2020 13:54
-
-
Save NP-chaonay/7357b7342cf7ee89f4bfca0b6b3920c6 to your computer and use it in GitHub Desktop.
My module that contains general object for using.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Name : NP-chaonay main module | |
# Description : My module that contains general object for using. | |
# Author : Nuttapong Punpipat (NP-chaonay) | |
# License : MIT License | |
# Language : English | |
# Version / Last Programmed : V.1.0 09/06/20 14:33 (UTC) | |
### TODO ### | |
# - Update this script : Added print_err | |
# - Improve print_err | |
# - Improve another object | |
### | |
"""User-created module for accessing general object, created by Nuttapong Punpipat (NP-chaoany)""" | |
######## Initialization ######## | |
import warnings as _warnings | |
import time as _time | |
class ValueWarning(Warning): | |
"""Warning related value content issue""" | |
pass | |
_warnings.filterwarnings('always','',ValueWarning,__name__) | |
######## Completed ######## | |
def display_datetime(epoch_time=None): | |
"""Display datetime from specific timestamp from epoch (or using current time). | |
Optional keyword arguments: | |
- epoch_time (None, int-alike, or float-alike) : Set timestamp from epoch to be displayed. Set as None to get the current time instead. | |
""" | |
if epoch_time is not None and not isinstance(epoch_time,(int,float)): | |
raise TypeError('Inputted value for \'epoch_time\' should be None, integer-like, or float-like, not \''+epoch_time.__class__.__name__+'\'.'+'\nAt: function:display_datetime, package:'+__name__) | |
if epoch_time is None: | |
epoch_time=_time.time() | |
epoch_time=list(map(lambda x:add_lead_zero(x,2,True),_time.localtime(epoch_time))) | |
return ':'.join(epoch_time[3:6])+' on '+'-'.join(epoch_time[0:3]) | |
######## Data-Type is in progress ######## | |
def add_lead_zero(num,digit,IgnoreDataManipulation=False,RaiseDataManipulationError=False,DigitMustAtLeastTwo=False): | |
"""Add leading the letters '0' to inputted integer 'num' according to defined 'digit' and return as string. | |
Required keyword arguments: | |
- num (int) : Integer (can be positive, zero, or negative) | |
- digit (int) : How much digits of number should be in returned string. | |
Optional keyword arguments: | |
- IgnoreDataManipulation (bool) : Avoid raising acceptable data manipulation warning. | |
- RaiseDataManipulationError (bool) : Raise every data manipulation warning as error exception. (IgnoreDataManipulation must be False.) | |
- DigitMustAtLeastTwo (bool) : Raise warning or error if defined digit is less than 2. | |
Data manipulation error: | |
- Digit should be at least 2. (Ignore by default) | |
- Amount of defined digits is less than digits of number in inputted integer. | |
""" | |
if type(num) is not int or type(digit) is not int: raise TypeError('parameters \'num\', \'digit\' should be integer.'+'\nAt: function:display_datetime, package:'+__name__) | |
if type(IgnoreDataManipulation) is not bool or type(RaiseDataManipulationError) is not bool or type(DigitMustAtLeastTwo) is not bool: raise TypeError('parameters \'IgnoreDataManipulation\', \'RaiseDataManipulationError\', and \'DigitMustAtLeastTwo\' should be boolean.'+'\nAt: function:display_datetime, package:'+__name__) | |
if IgnoreDataManipulation: RaiseDataManipulationError=False | |
if digit<1: raise ValueError('Digit should be at least one.'+'\nAt: function:display_datetime, package:'+__name__) | |
if digit<2 and DigitMustAtLeastTwo: | |
msg='Amount of digits should be at least 2.'+'\nAt: function:display_datetime, package:'+__name__ | |
if not IgnoreDataManipulation and not RaiseDataManipulationError: _warnings.warn(msg,ValueWarning) | |
if RaiseDataManipulationError: raise ValueError(msg) | |
# Reuse variable 'digit' | |
if num>=0: | |
num=str(num) | |
IsNegative=False | |
else: | |
num=str(abs(num)) | |
IsNegative=True | |
digit=digit-len(num) | |
if digit>0: | |
for x in range(0,digit): | |
# Reuse variable 'num' | |
num='0'+num | |
if not IsNegative: return num | |
else: return '-'+num | |
elif digit==0: | |
if not IsNegative: return num | |
else: return '-'+num | |
else: | |
msg='Defined digits amount is less than digits of number in inputted integer. It possibly means that some of used data has been manipulated incorrectly.'+'\nAt: function:display_datetime, package:'+__name__ | |
if not IgnoreDataManipulation and not RaiseDataManipulationError: _warnings.warn(msg,ValueWarning) | |
if RaiseDataManipulationError: raise ValueError(msg) | |
if not IsNegative: return num | |
else: return '-'+num | |
######## No documentation ######## | |
def mean(iter): | |
return sum(iter)/len(iter) | |
def median(iter): | |
list_=sorted(length) | |
num=len(list_) | |
if num%2==0: | |
return (iter[num-1]+iter[num-1])/2 | |
else: | |
return iter[num] | |
def is_str_is_integer(string): | |
if string[0]=='-': | |
n=1 | |
else: n=0 | |
for char in string[n:]: | |
if char in ['0','1','2','3','4','5','6','7','8','9']: continue | |
else: return False | |
return True | |
def sec_to_hms(sec): | |
if not isinstance(sec,(int,float)): raise TypeError('Inputted argument should be integer-like or float-like.'+'\nAt: function:display_datetime, package:'+__name__) | |
if sec<0: raise ValueError('Inputted argument shouldn\'t be negative.'+'\nAt: function:display_datetime, package:'+__name__) | |
tmp=sec%3600 | |
result=[None,None,None] | |
result[0]=int(sec//3600) | |
result[1]=int(tmp//60) | |
result[2]=round(tmp%60) | |
return result | |
def hms_to_min(hms): | |
hms=hms.split(':') | |
if len(hms)!=3: raise ValueError('Inputted arguments should be in format "<H>:<M>:<S>".'+'\nAt: function:display_datetime, package:'+__name__) | |
for num in hms: | |
if not is_str_is_integer(num): raise ValueError('Inputted arguments should be in format "<H>:<M>:<S>".'+'\nAt: function:display_datetime, package:'+__name__) | |
hms=list(map(int,hms)) | |
return hms[0]*60+hms[1]+(hms[2]/60) | |
def hms_to_sec(hms): | |
hms=hms.split(':') | |
if len(hms)!=3: raise ValueError('Inputted arguments should be in format "<H>:<M>:<S>".'+'\nAt: function:display_datetime, package:'+__name__) | |
for num in hms: | |
if not is_str_is_integer(num): raise ValueError('Inputted arguments should be in format "<H>:<M>:<S>".'+'\nAt: function:display_datetime, package:'+__name__) | |
hms=list(map(int,hms)) | |
return hms[0]*3600+hms[1]*60+hms[2] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment