import base64
import os
def docx_to_text(input_docx_path, output_txt_path):
"""Кодирует .docx файл в текстовый файл Base64."""
if not os.path.exists(input_docx_path):
print(f"Ошибка: Файл '{input_docx_path}' не найден.")
return
with open(input_docx_path, "rb") as docx_file:
# Читаем бинарные данные файла
binary_data = docx_file.read()
# Кодируем в base64 (получаем байтовую строку)
base64_bytes = base64.b64encode(binary_data)
# Декодируем в обычную строку текста (utf-8)
base64_text = base64_bytes.decode("utf-8")
with open(output_txt_path, "w", encoding="utf-8") as txt_file:
txt_file.write(base64_text)
print(
f"Успешно! Файл зашифрован в текст и сохранен в: '{output_txt_path}'"
)
print("Теперь вы можете скопировать содержимое этого файла.")
def text_to_docx(input_txt_path, output_docx_path):
"""Декодирует текстовый файл Base64 обратно в .docx."""
if not os.path.exists(input_txt_path):
print(f"Ошибка: Текстовый файл '{input_txt_path}' не найден.")
return
with open(input_txt_path, "r", encoding="utf-8") as txt_file:
base64_text = txt_file.read()
try:
# Переводим текст обратно в байты base64 и декодируем в исходный бинарник
binary_data = base64.b64decode(base64_text.encode("utf-8"))
except Exception as e:
print(
f"Ошибка при дешифровке: Текст поврежден или это не Base64. Подробнее: {e}"
)
return
with open(output_docx_path, "wb") as docx_file:
docx_file.write(binary_data)
print(f"Успешно! Файл восстановлен и сохранен как: '{output_docx_path}'")
if __name__ == "__main__":
print("Выберите режим работы:")
print("1 — Закодировать .docx в текст")
print("2 — Декодировать текст обратно в .docx")
choice = input("Введите цифру (1 или 2): ").strip()
if choice == "1":
docx_path = input(
"Введите путь к исходному .docx файлу: "
).strip( # Например: document.docx
'"'
)
txt_path = input(
"Введите путь для сохранения текста (.txt): "
).strip( # Например: encoded.txt
'"'
)
docx_to_text(docx_path, txt_path)
elif choice == "2":
txt_path = input(
"Введите путь к текстовому файлу с кодом: "
).strip( # Например: encoded.txt
'"'
)
docx_path = input(
"Введите путь для сохранения нового .docx: "
).strip( # Например: restored.docx
'"'
)
text_to_docx(txt_path, docx_path)
else:
print("Неверный выбор.")