# Mask to prefix
def mask_to_prefix(mask):
mask = '255.255.255.224'
conv_mask = [bin(int(i))[2:] for i in mask.split('.')]
prefix = sum([x.count('1') for x in conv_mask])
print(prefix)
# Prefix to mask
def prefix_to_mask(prefix):
mask = '1'*prefix
mask = [_ for _ in "".join(reversed(mask.zfill(32)))]
for _, c in enumerate(mask):
if _ in [8, 16, 24]:
mask[_] = '.' + c
else:
mask[_] = c
print(".".join([str(int(x, 2)) for x in "".join(mask).split('.')]))
Linux, python command's
Some useful commands and python, bash scripts for better use of linux.
10.06.2020 г.
24.04.2019 г.
Python script to extract multiple rar file's
# TODO: Add check if file exists if try to extract and if true delete them before extract!
# Import some module's
import os
import sys
# Require to install patool module
import patoolib
import multiprocessing as mp
# Hard code param if not add from termonal
if len(sys.argv) > 1:
assert os.path.exists(sys.argv[1])
PATH_TO_FILE = sys.argv[1]
else:
PATH_TO_FILE = r"D:\Movies\Man.with.a.Plan.S01.HDTV.x264-Scene"
def extract_function(line):
dir = os.path.dirname(line)
# This function use for extract file, need to use multiprocessing
try:
patoolib.extract_archive(line, outdir=dir)
except:
raise "Some error acquire when try to extract {line}".format(line=line)
else:
print("{line} was successfully extract!".format(line=line))
class MainCLass:
def __init__(self, path_to_search, param):
self.search_param = param
self._path_to_Search = path_to_search
def search_to_path(self):
"""
Method used for search zip files in folder
:return: List with file conteins rar
"""
list_with_files = []
for root, dirname, filename in os.walk(self._path_to_Search):
for file in filename:
if file.endswith(self.search_param):
list_with_files.append(os.path.join(root, file))
return list_with_files
def show_file_from_list(self):
"""
Method use for conteins result of file with suffix rar and yield result
:return:
"""
list_with_file = self.search_to_path()
for line in list_with_file:
yield line
def unrar_file_from_list(self):
my_file = list(i for i in self.show_file_from_list())
with mp.Pool() as pool:
result = pool.map(extract_function, my_file)
return result
def delete_rar_archive(self):
# Delete rar arhive! do after unrar them
for line in self.show_file_from_list():
os.unlink(line)
if __name__ == '__main__':
zip_file = MainCLass(PATH_TO_FILE, 'rar')
# uncoment to unrar file's
zip_file.unrar_file_from_list()
# uncoment to delte rar file's
# zip_file.delete_rar_archive()
# Import some module's
import os
import sys
# Require to install patool module
import patoolib
import multiprocessing as mp
# Hard code param if not add from termonal
if len(sys.argv) > 1:
assert os.path.exists(sys.argv[1])
PATH_TO_FILE = sys.argv[1]
else:
PATH_TO_FILE = r"D:\Movies\Man.with.a.Plan.S01.HDTV.x264-Scene"
def extract_function(line):
dir = os.path.dirname(line)
# This function use for extract file, need to use multiprocessing
try:
patoolib.extract_archive(line, outdir=dir)
except:
raise "Some error acquire when try to extract {line}".format(line=line)
else:
print("{line} was successfully extract!".format(line=line))
class MainCLass:
def __init__(self, path_to_search, param):
self.search_param = param
self._path_to_Search = path_to_search
def search_to_path(self):
"""
Method used for search zip files in folder
:return: List with file conteins rar
"""
list_with_files = []
for root, dirname, filename in os.walk(self._path_to_Search):
for file in filename:
if file.endswith(self.search_param):
list_with_files.append(os.path.join(root, file))
return list_with_files
def show_file_from_list(self):
"""
Method use for conteins result of file with suffix rar and yield result
:return:
"""
list_with_file = self.search_to_path()
for line in list_with_file:
yield line
def unrar_file_from_list(self):
my_file = list(i for i in self.show_file_from_list())
with mp.Pool() as pool:
result = pool.map(extract_function, my_file)
return result
def delete_rar_archive(self):
# Delete rar arhive! do after unrar them
for line in self.show_file_from_list():
os.unlink(line)
if __name__ == '__main__':
zip_file = MainCLass(PATH_TO_FILE, 'rar')
# uncoment to unrar file's
zip_file.unrar_file_from_list()
# uncoment to delte rar file's
# zip_file.delete_rar_archive()
22.04.2019 г.
bash multiple rename file's
# bash multiple rename file's
for file in `find . -type f -name "*.txt"`;do mv $file ${file%.*}.csv;done
for file in `find . -type f -name "*.txt"`;do mv $file ${file%.*}.csv;done
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()))
#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()
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()
Абонамент за:
Публикации
(
Atom
)