def main(file, substitution=None, save=None, output=None): try: if file is None: raise FileNotFoundError('Select file for encrypt.') except FileNotFoundError as e: print(e) return e if substitution: subst = read_json_file(substitution, 'utf-8') else: subst = generate_substitution('A-Za-z') if not file: result = code_stdin(subst) else: result = code_text_from_file(file, 'utf-8', subst) if save: write_json_in_file('substitution.txt', subst, 'utf-8') if output: with open(output, 'w', encoding='utf-8') as file: file.write(result) else: sys.stdout.write(result)
def test_decode_from_file(self): subst = e.generate_substitution(self.alph_en) code = e.code_text_from_file(make_big_en_file(), 'utf-8', subst) rev_subst = e.reverse_substitution(subst) with make_big_en_file() as f: f.seek(0) original = f.read().decode(ENCODING) decode = e.code(code, rev_subst) self.assertEqual(original, decode)
def test_decode_from_file(self): subst = e.generate_substitution(self.alph_en) with open('Harry.txt', 'rb') as f: self.file = f.read().decode('utf-8') code = e.code_text_from_file('Harry.txt', 'utf-8', subst) rev_subst = e.reverse_substitution(subst) decode = e.code(code, rev_subst) print(decode) self.assertEqual(self.file, decode)
def decode_file(self, code_fn, encoding='utf-8', key=None): """ Decode text from file :param key: :param code_fn: :param encoding: :return: """ if not key: key = self.key return code_text_from_file(code_fn, encoding, key)
def main(): parser = argparse.ArgumentParser( usage='{} [OPTIONS] ALPHABET FILE'.format(os.path.basename( sys.argv[0])), formatter_class=argparse.ArgumentDefaultsHelpFormatter, description='Encode text using substitution cipher') subst_group = parser.add_mutually_exclusive_group() subst_group.add_argument('-s', '--substitution', type=str, dest='substitution', metavar="FILENAME", help='file with the substitution in json format') subst_group.add_argument( '-r', '--reverse', type=str, dest='reverse', metavar="FILENAME", help='reverse substitution from file, and use it to encode text') subst_group.add_argument( '-g', '--generate', type=str, dest='generate', metavar="FILENAME", default="subst.txt", help='generate substitution and choose where to store it') parser.add_argument( 'alph', metavar='alphabet', help='language, in which text is written (for example: A-Za-z)') parser.add_argument('fn', metavar='FILE', nargs='?', default=None, help='name of the file with text') parser.add_argument('-o', '--output', type=str, dest='output', metavar="FILENAME", help='choose, where to store output') parser.add_argument( '-e', '--encoding', type=str, dest='encoding', default='utf-8', help='choose FILE (and output file, if key -o is chosen) encoding') args = parser.parse_args() if not args.alph: sys.exit("Error: alphabet must be specified") if args.substitution: subst = read_json_file(args.substitution, args.encoding) elif args.reverse: subst = reverse_substitution( read_json_file(args.reverse, args.encoding)) elif args.generate: subst = generate_substitution(args.alph) else: subst = generate_substitution(args.alph) if not args.fn: result = code_stdin(subst) else: result = code_text_from_file(args.fn, args.encoding, subst) # print("Saving substitution to '{}{}'...".format(os.path.sep, SUBST_FILE)) if args.generate: write_json_in_file(args.generate, subst, args.encoding) # print("DONE") if args.output: with open(args.output, 'w', encoding=args.encoding) as file: file.write(result) else: sys.stdout.write(result)
def decode_file(self, file, encoding='utf-8', key=None): if not key: key = self.key return code_text_from_file(file, encoding, key)