16.03.2018 г.

Python convet number to word's

import random
#HARD CODE PARAM
delim = 3
words = ["милиона", "хиляди", "", ""]
number = "".join([str(random.choice(range(1,11))) for i in range(1, random.choice(range(4, 7)))])
l = len(number)
print(number)

numbers = {
    1:"Едно", 2:"Две", 3:"Три", 4:"Четири", 5:"Пет", 6:"Шест", 7:"Седем", 8:"Осем", 9:"Девет",
    10:"Десет", 11:"Единадест", 12:"Дванадесет", 13:"Тринадесет", 14:"Четринадесет", 15:"Петнадесет",
    16:"Шестнадесет", 17:"Седемнадесет", 18:"Осемнадесет", 19:"Деветнадесет", 20:"Двадесет",
    30:"Тридесет", 40:"Четидредесет", 50:"Петдесет", 60:"Шейсет", 70:"Седемдесет", 80:"Осемдесет",
    90:"Деветдесет", 100:"Сто", 200:"Двеста", 300:"Триста", 400:"Четиристотин", 500:"Петстотин",
    600:"Шестотин", 700:"Седемстотин", 800:"Осемстотин", 900:"Деветстотин"
}


def coma_delimiter_number(number):
    ''' Разделя числото после се сплитва и се маха празният символ '''
    result = "".join((i%delim==l%delim)*","+c for i, c in enumerate(number))
    return list(map(int, list(filter(None,result.split(",")))))



def razbiva_chisloto(n):
    ''' Върти числото към стринг '''
    if (len(str(n)) == 3 and n%100==0):
        return("{}".format(numbers[n]))

    elif (len(str(n)) == 3 and n%100!=0):
        a, b = n-n%100, n%100
        if b > 20:
            c, d = b-b%10, b%10
            return("{} {} и {}".format(numbers[a], numbers[c], numbers[d]))
        else:
            return("{} и {}".format(numbers[a], numbers[b]))

    elif (len(str(n)) == 2) and 1<n<=20:
        return((numbers[n]))

    elif (len(str(n)) == 2) and n > 20:
        a, b = n-n%10, n%10
        return("{} и {}".format(numbers[a], numbers[b]))

    else:
        return(numbers[n])


if __name__ == '__main__':
    result = coma_delimiter_number(number)
    convert = []
    for i, k in enumerate(result):
        convert.append(razbiva_chisloto(k))

    if len(convert) == 2:
        print("{} хиляди {}".format(convert[0], convert[1].lower()))

    elif len(convert) == 3:
        print("{} милиона {}  хиляди {}".format(convert[0], convert[1].lower(), convert[2].lower()))
       
    else:
        print("{}".format(convert[0].capitalize()))

15.01.2018 г.

Pytnon tkinter sum completed Bulgarian money

from tkinter import *
from tkinter import ttk

# Функцията за събиране на резултата


def sumarize():
    ''' Първо трие резултата ако е бил натиснат преди това после се проверява
всяко поле дали е различно от празно, ако не е се събира стоиността към тотала '''
    Result.delete(0, END)
    total = 0.00
    if entry_100.get() != '':
        total += (float(entry_100.get()) * 100.00)
    if entry_50.get() != '':
        total += (float(entry_50.get()) * 50.00)
    if entry_20.get() != '':
        total += (float(entry_20.get()) * 20.00)
    if entry_10.get() != '':
        total += (float(entry_10.get()) * 10.00)
    if entry_5.get() != '':
        total += (float(entry_5.get()) * 5.00)
    if entry_2.get() != '':
        total += (float(entry_2.get()) * 2.00)
    if entry_1.get() != '':
        total += (float(entry_1.get()) * 1.00)
    if entry_0.get() != '':
        total += (float(entry_0.get()) * 0.50)
    Result.insert(END, total)

# Фунцкия за добавяне към търсеното към всяко от полетата


def add_to_100():
    total = 0.00
    for i in entry_100.get().split('+'):
        total += float(i)
    entry_100.delete(0, END)
    entry_100.insert(END, total)


def add_to_50():
    total = 0.00
    for i in entry_50.get().split('+'):
        total += float(i)
    entry_50.delete(0, END)
    entry_50.insert(END, total)


def add_to_20():
    total = 0.00
    for i in entry_20.get().split('+'):
        total += float(i)
    entry_20.delete(0, END)
    entry_20.insert(END, total)


def add_to_10():
    total = 0.00
    for i in entry_10.get().split('+'):
        total += float(i)
    entry_10.delete(0, END)
    entry_10.insert(END, total)


def add_to_5():
    total = 0.00
    for i in entry_5.get().split('+'):
        total += float(i)
    entry_5.delete(0, END)
    entry_5.insert(END, total)


def add_to_2():
    total = 0.00
    for i in entry_2.get().split('+'):
        total += float(i)
    entry_2.delete(0, END)
    entry_2.insert(END, total)


def add_to_1():
    total = 0.00
    for i in entry_1.get().split('+'):
        total += float(i)
    entry_1.delete(0, END)
    entry_1.insert(END, total)


def add_to_0():
    total = 0.00
    for i in entry_0.get().split('+'):
        total += float(i)
    entry_0.delete(0, END)
    entry_0.insert(END, total)

# Настрйка на шоркътите през стрелките на клавиатурата
# Не работят
# def up_arrow(event):
# Tab

# def down_arrow(event):
# print(current.position())

# Започваме с настройките на прозореца
root = Tk()
root.title('Money check')
root.geometry('350x370+100+100')
root.maxsize(350, 370)

# Бинд конфигурацията
# root.bind('<Up>', up_arrow)
# root.bind('<Down>', down_arrow)

# 100
label_100 = ttk.Label(root, text='Пари по {:>3}'.format(100))
label_100.grid(row=0, column=0, sticky=W)

entry_100 = Entry()
entry_100.focus()
entry_100.grid(row=0, column=1, padx=5)

B_100 = Button(root, text='+ Добавя към 100', command=add_to_100, width=15,
               font=("Times New Roman", 10, "bold"))
B_100.grid(row=0, column=2)

# 50
label_50 = ttk.Label(root, text='Пари по {:>4}'.format(50))
label_50.grid(row=1, column=0, sticky=W)

entry_50 = Entry()
entry_50.grid(row=1, column=1, padx=5)

B_50 = Button(root, text='+ Добавя към 50', command=add_to_50, width=15,
              font=("Times New Roman", 10, "bold"))
B_50.grid(row=1, column=2)

# 20
label_20 = ttk.Label(root, text='Пари по {:>4}'.format(20))
label_20.grid(row=2, column=0, sticky=W)

entry_20 = Entry()
entry_20.grid(row=2, column=1, padx=5)

B_20 = Button(root, text='+ Добавя към 20', command=add_to_20, width=15,
              font=("Times New Roman", 10, "bold"))
B_20.grid(row=2, column=2)

# 10
label_10 = ttk.Label(root, text='Пари по {:>4}'.format(10))
label_10.grid(row=3, column=0, sticky=W)

entry_10 = Entry()
entry_10.grid(row=3, column=1, padx=5)

B_10 = Button(root, text='+ Добавя към 10', command=add_to_10, width=15,
              font=("Times New Roman", 10, "bold"))
B_10.grid(row=3, column=2)

# 5
label_5 = ttk.Label(root, text='Пари по {:>5}'.format(5))
label_5.grid(row=4, column=0, sticky=W)

entry_5 = Entry()
entry_5.grid(row=4, column=1, padx=5)

B_5 = Button(root, text='+ Добавя към 5', command=add_to_5, width=15,
             font=("Times New Roman", 10, "bold"))
B_5.grid(row=4, column=2)

# 2
label_2 = ttk.Label(root, text='Пари по {:>5}'.format(2))
label_2.grid(row=5, column=0, sticky=W)

entry_2 = Entry()
entry_2.grid(row=5, column=1, padx=5)

B_2 = Button(root, text='+ Добавя към 2', command=add_to_2, width=15,
             font=("Times New Roman", 10, "bold"))
B_2.grid(row=5, column=2)

# 1
label_1 = ttk.Label(root, text='Пари по {:>5}'.format(1))
label_1.grid(row=6, column=0, sticky=W)

entry_1 = Entry()
entry_1.grid(row=6, column=1, padx=5)

B_1 = Button(root, text='+ Добавя към 1', command=add_to_1, width=15,
             font=("Times New Roman", 10, "bold"))
B_1.grid(row=6, column=2)

# 0.5
label_0 = ttk.Label(root, text='Пари по {:>4}'.format(0.5))
label_0.grid(row=7, column=0, sticky=W)

entry_0 = Entry()
entry_0.grid(row=7, column=1, padx=5)

B_0 = Button(root, text='+ Добавя към 0.5', command=add_to_0, width=15,
             font=("Times New Roman", 10, "bold"))
B_0.grid(row=7, column=2)

# Бутона за сметката
B = Button(root, text='Гранд Тотал', command=sumarize, width=15,
           font=("Times New Roman", 10, "bold"))
B.grid(row=8, column=2, padx=5, sticky=N, pady=5)

# Резулатата
Result = Listbox(root, height=9)
Result.grid(row=8, column=0, columnspan=2, rowspan=2,
            sticky=W + E, padx=5, pady=5)


if __name__ == '__main__':
    root.mainloop()

1.01.2018 г.

Python split one big file to many small, and return many small to one big

#IMPORT SOME MODULES
import os        #OPEN FILE
import sys        #GET PARAM FROM CONSOLE AND USE TO EXIT IF ERROR RAISE
import re         #REGULAR EKSPRESION

#HARDCODE PARAM IS HERE
#PATH TO SEARCH BIG FILE
PATH = r'C:\\Users\\Borko\\Desktop\\split_files\\Errors.log'

#PATH TO FOLDER WHERE PUT RESULT AND FROM WHERE CREATE FILE BACK
PATH2 = r'C:\\Users\\Borko\\Desktop\\'

#CHUNK SIZE TO READ FILE 1Mb
CHUNK_SIZE = (1024*1024)

#NAME TO SMALL FILES
some_name = 'some_name'

#Check Path exists close program if not
try:
    open(PATH, 'r')
except FileNotFoundError as fr :
    print(fr)
    sys.exit()


#OPEND FILE USE CHUNK AND ITER RESULT WITH YIELD
def read_file(PATH):
    lines = open(PATH, 'br').read()
    while lines:
        chunk = lines[:CHUNK_SIZE]
        lines = lines[CHUNK_SIZE:]
        yield chunk


#WRITE SMALL CHUNK TO NEW SMALL FILES WITH NOT EXTENSION
#EXTENSION FOR SMALL FILES COME FROM PARAM count
def write_to_files(PATH2):
    count = 1
    for res in read_file(PATH):
        name = '{}{}'.format(some_name, count)
        w = open(os.path.join(PATH2, name), 'bw')
        w.write(res)
        w.close()
        count += 1


#READ FOLDER PATH2 AND SEARCH FOR FILES'S THEN RETURN LIST WITH THEM
def concat_chunk_file_to_one():
    found_chink_files = []
    for file in os.listdir(PATH2):
        if re.search('({})\d+'.format(some_name), file):
            found_chink_files.append(os.path.join(PATH2, file))
    return sorted(found_chink_files)


#CONCAT ALL FOUND SMALL FILES TO ONE BIG
def write_concat_to_one_big():
    w = open(PATH2+'\\'+'BIG_FILE.txt', 'a')
    for line in concat_chunk_file_to_one():
        w.write(open(line, 'r').read())
        #print(line)
    w.close()


if __name__ == '__main__':
    #UNCOMENT TO SPLIT FILE TO SMALL
    #write_to_files(PATH2)
   
    #UNCOMENT TO JOIN SMALL FILES TO ONE BIG
    #write_concat_to_one_big()

30.12.2017 г.

Calculate size of folder with python scripts only folder not RAR

#Import module
import os
import sys

class InFolder:

    def __init__(self, folder):
        self.folder = folder

    def search(self):
        founded = set()
        for root, dirname, filename in os.walk(self.folder):
            clean_root = os.path.normpath(root)
            clear_root_name = os.path.normcase(clean_root)
            founded.add(clear_root_name)
        founded.remove(self.folder)
        return founded


if len(sys.argv) == 1:
        print("Try again with add path to scan!")
        sys.exit('Usage: python %s path-name' % sys.argv[0])
elif not os.path.exists(sys.argv[1]):
    print("Try again with add path to scan!")
    sys.exit('Usage: python %s and corect file name (example c:\\)' % sys.argv[0])
    sys.exit()
else:
    my_project = InFolder(sys.argv[1])
    clear_folder = my_project.search()


class Second:

    def __init__(self, path2):
        self.path2 = path2

    def calculate_size(self):
        my_calc = dict()
        size = 0
        for root, dirname, filename in os.walk(self.path2):
            for file in filename:
                f_path = os.path.join(root, file)
                size += os.path.getsize(f_path)
            my_calc[self.path2] = (size/1024)/1024
        return my_calc


total = dict()

for f in clear_folder:
    main = Second(f)
    for i, v in main.calculate_size().items():
        total[i] = v

for line in sorted(total.items(), key=lambda x: x[1]):
    print('{0:>10} - {1:.2f}Mb'.format(*line))

16.12.2017 г.

Read excell file with python, validate and return defaultdict

import os
import xlrd
from collections import defaultdict
import sys
from pprint import pprint
import re

'''
Some name1     2345        someemal1@gmail.com
Some name12    23456        someemal2@gmail.com
Some name1    0            someemal1@gmail.com
Some name3    0889345        someemal1@gmail.com
'''

filename = "somefile.xls"
result = defaultdict(list)


def checkFilename(filename):
    '''Check file is excel or not '''
    if filename.endswith('xls'):
        return filename
    else:
        return 'Not valid filename'
        sys.exit()


class ReadXLS:

    def __init__(self, checkFilename):
        self.filename = checkFilename

    def realReadFilename(self):
        '''Read xls file with xlrd module '''
        try:
            workbook = xlrd.open_workbook(self.filename)
        except:
            print("some error...")
            sys.exit()
        else:
            try:
                sheet = workbook.sheet_by_index(0)
            except IndexError as ie:
                print(ie)
                sys.exit()
            else:
                for rowx in range(sheet.nrows):
                    columnmapping = sheet.row_values(rowx)
                    yield columnmapping

    def checkResult(self):
        '''add to result only what i whant'''
        for line in ReadXLS.realReadFilename(self):
            if ((line[0] in (None, '')) or (line[1] in (None, ''))
                    or (line[2] in (None, '')) or not
                    re.search(r'[\w.-]+@[\w.-]+.\w+', line[2])):
                continue
            else:
                #result[line[2].upper()].append((line[0], line[1]))
                result[line[2].upper()].append(
                    (line[1].strip().replace(' ', ''), line[0].strip())
                )

    def __repr__(self):
        ''' Why I can '''
        return "{}".format(self.filename)


if __name__ == '__main__':
    test = ReadXLS(checkFilename(filename))
    test.checkResult()
    pprint(result)