91 lines
2.4 KiB
Python
Executable File
91 lines
2.4 KiB
Python
Executable File
#!/bin/python
|
|
""" Compression
|
|
Usage:
|
|
compression.py (-c|-d) -t <type> --in <input> [--out <output>]
|
|
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['<type>'].lower() == 'lz':
|
|
if argument['-d']:
|
|
result = lz_decompression(read_file(argument['<input>']))
|
|
print(result)
|
|
if argument['-c']:
|
|
w_list, k_list = lz_compression(read_file(argument['<input>']))
|
|
save_lz('test.Ltxt', w_list, k_list)
|
|
elif argument['<type>'].lower() == 'rle':
|
|
if argument['-d']:
|
|
result = rle_decompression(read_file(argument['<input>']))
|
|
print(result)
|
|
if argument['-c']:
|
|
result = rle_compression(read_file(argument['<input>']))
|
|
print(result)
|
|
else:
|
|
raise TypeError("choose a type between lz and rle")
|