------WebKitFormBoundaryFvgrhoe2FqQdLu4J
Content-Disposition: form-data; name="userId"

HT/50201
------WebKitFormBoundaryFvgrhoe2FqQdLu4J
Content-Disposition: form-data; name="sessId"

EWZJGUQLEDTZEQXWOMERLWZY
------WebKitFormBoundaryFvgrhoe2FqQdLu4J
Content-Disposition: form-data; name="ctrlId"

1768274923354599726
------WebKitFormBoundaryFvgrhoe2FqQdLu4J
Content-Disposition: form-data; name="fn"; filename="email_spam.py"
Content-Type: text/x-python

####################################################################################################
from sys import argv
from os import path
from datetime import date
from files import datafile, textfile, linefile, csvfile
####################################################################################################
BasePath = r'C:\CJS\prj\Python\ws'


##================================================================================================##
def median (nums:list) -> float:
    # Odd: e.g. 9 -> 4,1: [0,1,2,3][4][5,6,7,8]
    # Even: e.g. 10 -> 5,0: [0,1,2,3][4,5][6,7,8,9]
    xs = sorted(nums)
    half,rem = divmod(len(xs), 2)
    return float (xs[half]) if rem else ((xs[half-1]+xs[half]) / 2.0)


##================================================================================================##
def spam_counts (*args):
    filename = 'spam counts.txt'
    fn = path.join(BasePath, filename)
    fo = csvfile(fn)
    fo.load()

    data = [(date(int(row[0]),int(row[1]),int(row[2])), int(row[3])) for row in fo if 1<len(row)]

    days = len(data)
    amts = [row[1] for row in data]
    total = sum(amts)
    avg = total/days

    maxday = max(data, key=lambda x:x[1])
    minday = min(data, key=lambda x:x[1])

    med = median(amts)

    print(f'SPAM EMAILS from {data[0][0]} to {data[-1][0]} ({days} days)')
    print(f'Total: {total} emails')
    print(f'Most: {maxday[1]} on {maxday[0]}')
    print(f'Least: {minday[1]} on {minday[0]}')
    print()
    print(f'Median: {med:.2f}')
    print(f'Mean: {avg:.2f}')
    print()
    input('Press [Enter]')
    print()

    return data


##================================================================================================##
def main (*args):
    rv = ()
    rv = spam_counts(*args)
    return rv
####################################################################################################
if __name__ == '__main__':
    print(argv[0])
    print()
    rv = main(*argv[1:])
    print()
####################################################################################################
'''eof'''

------WebKitFormBoundaryFvgrhoe2FqQdLu4J
Content-Disposition: form-data; name="size"

1
------WebKitFormBoundaryFvgrhoe2FqQdLu4J
Content-Disposition: form-data; name="cols"

16
------WebKitFormBoundaryFvgrhoe2FqQdLu4J
Content-Disposition: form-data; name="bd"

le
------WebKitFormBoundaryFvgrhoe2FqQdLu4J
Content-Disposition: form-data; name="nbrs"

d
------WebKitFormBoundaryFvgrhoe2FqQdLu4J
Content-Disposition: form-data; name="nw"

4
------WebKitFormBoundaryFvgrhoe2FqQdLu4J
Content-Disposition: form-data; name="data"

x
------WebKitFormBoundaryFvgrhoe2FqQdLu4J
Content-Disposition: form-data; name="dw"

2
------WebKitFormBoundaryFvgrhoe2FqQdLu4J
Content-Disposition: form-data; name="cmd"

Line#
------WebKitFormBoundaryFvgrhoe2FqQdLu4J
Content-Disposition: form-data; name="enc"

utf-8
------WebKitFormBoundaryFvgrhoe2FqQdLu4J--
