moving files
This commit is contained in:
		
							
								
								
									
										90
									
								
								q1/01dec/compress.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										90
									
								
								q1/01dec/compress.py
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,90 @@ | ||||
| #!/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") | ||||
		Reference in New Issue
	
	Block a user