#!/bin/python """ Compression Usage: compression.py (-c|-d) -t --in [--out ] compression.py -h | --help compression.py --version Options: -h --help Show this screen --version Show Version -c Compress -d Decompress -t Choose Compression Type (currently supported: lz, rle) --in Input file --out Output file """ def read_file(filename:str) -> str: try: with open(filename) as file: return file.read() except e: print(e) def lz_compression(text:str): """compress all duplicate word put each word into a list and make make a string of all the occurence :text: string to compress :returns: tuple with (list of word, decoding string) """ splitted_text = text.split() word_list = list() key = dict() key_value = 0 for v in splitted_text: if v not in key.keys(): key[v] = key_value key_value += 1 word_list.append(key[v]) return word_list, key def save_lz(filename, word_list, key_list): with open(filename, 'w') as file: word_list = map(str, word_list) file.writelines(' '.join(word_list)) file.writelines(' '.join(list(key_list.items()))) def lz_decompression(text:str): pass def rle_compression(text:str): """compress all duplicate word put each word into a list and make make a string of all the occurence :text: string to compress :returns: tuple with (list of word, decoding string) """ splitted_text = text.split() def rle_decompression(text:str): pass if __name__ == "__main__": from docopt import docopt argument = docopt(__doc__, version="V1") print(argument) if argument[''].lower() == 'lz': if argument['-d']: result = lz_decompression(read_file(argument[''])) print(result) if argument['-c']: w_list, k_list = lz_compression(read_file(argument[''])) save_lz('test.Ltxt', w_list, k_list) elif argument[''].lower() == 'rle': if argument['-d']: result = rle_decompression(read_file(argument[''])) print(result) if argument['-c']: result = rle_compression(read_file(argument[''])) print(result) else: raise TypeError("choose a type between lz and rle")