def generate_codes(self) -> Dict[int, Deque[bool]]:
        """
        Reads the whole input file and generates coding_table by the Huffman tree

        :return: coding table where key is byte and value is deque of bits
        """
        self.input_file.seek(0)
        freq_table = {}
        while True:
            input_buffer = self.input_file.read(INPUT_BUFFER_SIZE)
            if not input_buffer:
                break
            for byte in input_buffer:
                if byte in freq_table:
                    freq_table[byte] += 1
                else:
                    freq_table[byte] = 1
        tree = HuffmanTree(freq_table)
        return tree.generate_codes()
示例#2
0
    def generate_codes(self) -> Dict[int, Deque[bool]]:
        """
        Reads the whole input file and generates coding_table by the Huffman tree

        :return: coding table where key is byte and value is deque of bits
        """
        self.input_file.seek(0)  # переключаемся на первый байт входного файла
        freq_table = {
        }  # создаём пустую мапу частот, в котоорую в дальнейшем будем её записывать
        while True:
            input_buffer = self.input_file.read(
                INPUT_BUFFER_SIZE
            )  # считываем и помещаем данные из инпут файла в буффер (в память)
            if not input_buffer:  # если ничего не считалось, т.е. файл пустой - выходим
                break
            for byte in input_buffer:  # если считались данные, перебираем каждый байт этого файла
                if byte in freq_table:  # если данный байт уже есть в таблице частот, инкрементируем его значение
                    freq_table[byte] += 1
                else:  # если данного байта ещё нет в таблице частот, значит нужно его добавить и присвоить 1, как количество повторений
                    freq_table[byte] = 1
        tree = HuffmanTree(
            freq_table
        )  # строим дерево после формирования таблицы частот (внутри простроится дерево, и вернем коды которые получатся для каждого символа)
        return tree.generate_codes()  # возвращаем построенные коды