Проблема в задаче с шифрованием текста. RegEx
Всем привет. Возникла проблема с шифрованием текста. Суть задачи: есть текст-контейнер и в нём нужно спрятать другой текст. Вся работа идёт с файлами. Файл, который прячем представляется в виде последовательности бит. Если бит = 1, то удваиваем пробел в тексте, куда прячем, если = 0, то без изменений.
Я реализовал это с помощь RegEx, но регулярка не понимает конца строки, на выходе я получаю одну целую строку в документе, а не столбец из строк, которые я заносил. Не могу реализовать ограничитель, чтобы чтение и запись происходили построчно.
#!/usr/bin/env python3
# -*- coding: utf8 -*-
import os
import re
def start():
while True:
selection = int(input("\nОбратите вниание, что текст-контейнер не сможет вместить текст любой длинны. \n Если вы хотите зашифровать длинное сообщение, то увеличьте объём текст-контейнера. \n В противном случае алгоритм зашифрует только часть вашего сообщения\n -------------- \nВыберите один из вариантов: \n -------------- \n 1 - Закодировать сообщение \n 2 - Раскодировать сообщение \n 3 - Выход \n"))
if selection == 1 and os.stat("text.txt").st_size != 0:
encode()
elif selection == 2:
decode()
elif selection == 3:
break
else:
print("Что-то пошло не так:\n 1)Ваш файл контейнер пустой\n 2)Вы ввели неправильный символ для работы с программой...")
def encode():
with open("text.txt", "r") as f:
text = f.read()
with open("encode.txt", "r") as a:
encoded = a.read()
def generator():
for i in bytes(encoded, encoding='utf-8'):
for bit in '{:0>8b}'.format(i):
yield bit
while True:
yield '0'
g = generator()
def insertion(m):
bit = g.__next__()
return ' ' if bit == '1' else ' '
t2 = re.sub(r'\s+', insertion, text)
print(t2)
with open("result.txt", "w") as f:
f.write(''.join(t2))
def decode():
with open("result.txt", "r") as a:
text2 = a.read()
ls = []
def parse(m):
ls.append('1' if m.group(0) == ' ' else '0')
return ' '
re.sub(r'\s+', parse, text2)
t3 = []
for i in range(0, len(ls), 8):
t3.append(chr(int(''.join(ls[i:i + 8]), 2)))
with open("decode.txt", "w") as f:
f.write(''.join(t3))
start()
#пример файла text
'''''
1 1 1 1 1 1 1
1 1 1 1 1 1 1
1 1 1 1 1 1 1
1 1 1 1 1 1 1
1 1 1 1 1 1 1
1 1 1 1 1 1 1
1 1 1 1 1 1 1
1 1 1 1 1 1 1
'''''
Ответы (1 шт):
\s
For 8-bit (bytes) patterns: Matches characters considered whitespace in the ASCII character set; this is equivalent to
[ \t\n\r\f\v].
Укажите явно множество тех символов, которые хотите заменять.