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")
 |