import string, time, warnings


def worpystics(charset, ml, mr, output2file):

    texts = ""
    for element in path:     
        #p = r"{}".format(element)
        #print(p)
        with open(element, "r", encoding = charset) as file:
            text = file.read()
            #print(text)        
            texts = texts + text

    #print(texts)
    #print(string.punctuation)
    sp = string.punctuation + "«»"
    words = [w.strip(sp) for w in texts.split()]
    #print(words)

    dict = {}
    
    for i in range(len(words)):        
        word = words[i].lower()
        wl = len(word)        
        if wl >= ml: # слово нужной длины
            if word in dict: # уже встречалось: +1
                dict[word] = dict[word] + 1
            else: # не встречалось: 1
                dict[word] = 1

    if mr > 1: # удаляем слова с недостаточным количеством вхождений
        for k, v in list(dict.items()):
            #print(dict[k])
            #print(v)
            #print(k)
            if v < mr:
                del dict[k]

    dict = sorted(dict.items(), key=lambda t: t[1], reverse=True)
    
    result = ""
 
    if output2file:
        for key, value in dict:
            result = f"{result}\n{key}\t{value}" 
        ts = round(time.time() * 1000)
        name = f"worpystics_{str(ts)}.txt"
        with open(name, "w", encoding="utf-8") as file:
            file.write(result.strip())  
    else:
        for key, value in dict:
            result = f"{result}\n{key}: {value}"     
        print(result.strip())

            
#path = "c:\path\work.txt" # путь к тексту
path = ["c:\path\work.txt", "c:\path\work_z.txt"] # набор путей к тексту
ml = 4 # минимальная длина слова для попадания в статистику
mr = 1 # минимальное количество слов для попадания в статистику
charset = "utf-8" # умолчальная кодировка
output2file = False # вывод в файл по дефолту выключен

warnings.filterwarnings("ignore")    

try:
    worpystics(charset, ml, mr, output2file)
except UnicodeDecodeError:
    print(f"Ололо! Похоже, входные данные не в кодировке {charset}, попробуем альтернативу.\n")
    if charset == "utf-8":
        charset = "windows-1251"
    else:
        charset = "utf-8"    
    worpystics(charset, ml, mr, output2file)