Как последовательно открыть несколько файлов txt и проверить значения в них?
У меня есть программа способная расшифровывать зашифрованные файлы. В начале после запуска необходимо загрузить ранее созданный ключ с ответами, нажав на кнопку "Загрузить ключи с ответами" после чего выбрать нужный ключ, данные из ключа автоматически загрузятся в lineEdit. После чего, по моей задумке, пользователь вводит директорию в которой находятся файлы для проверки (их может быть огромное множество, а может быть и один), после чего нажимает на кнопку "Начать проверку работ", после чего программа должна сама по очереди открыть все файлы в этой директории с расширением .txt, и проверить полученные данные из ранее загруженного ключа и данных располагающихся в файле (файлы тоже зашифрованы и расшифровываются точно также как и ранее загруженный ключ), программа проверяет каждую строку, по итогу программа выводит в другой файл .txt (находящийся в другой директории) все данные из файла (в расшифрованном виде) и баллы. Пример вывода №1: 1, №2: 0 (и так 12 раз).
Текста много, но только так можно объяснить, что я пытаюсь сделать, но как то даже не приходит в голову идей как это реализовать.
main.py:
# -*- coding: utf-8 -*-
from PyQt5 import QtCore, QtGui, QtWidgets
from crypto import Ui_MainWindow
from PyQt5.Qt import *
import rsa
import base64
import os
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.answers = []
self.setWindowTitle("Automatic OGE verification system ver.00.09.56")
self.btn_generate_keys.clicked.connect(self.func_generate_keys)
(self.key_pub, self.key_priv) = rsa.newkeys(512)
self.pushButton_2.clicked.connect(self.information)
self.pushButton_3.clicked.connect(self.app_key_task)
def verification(self):
pass
def information(self):
if not os.path.exists('key_pub.pem'):
msg = QMessageBox()
msg.setIcon(QMessageBox.Warning)
msg.setText("Ошибка")
msg.setInformativeText('ВНИМАНИЕ! Публичный ключ не найден'
'Попробуйте сгенерировать новый ключ.')
msg.setWindowTitle("Ошибка")
msg.exec_()
return
with open('key_pub.pem', "rb") as f:
_key_pub = f.read()
key_pub = self.key_pub.load_pkcs1(_key_pub)
self.bit_key = self.lineEdit_13.text()
self.directory_key_check = self.lineEdit_14.text()
self.directory_file_check = self.lineEdit_15.text()
self.name_file_key = self.lineEdit_16.text()
self.directory_check_file = self.lineEdit_17
self.key_task(key_pub)
def key_task(self, key_pub):
self.number_1 = self.lineEdit.text()
self.number_2 = self.lineEdit_2.text()
self.number_3 = self.lineEdit_3.text()
self.number_4 = self.lineEdit_4.text()
self.number_5 = self.lineEdit_5.text()
self.number_6 = self.lineEdit_6.text()
self.number_7 = self.lineEdit_7.text()
self.number_8 = self.lineEdit_8.text()
self.number_9 = self.lineEdit_9.text()
self.number_10 = self.lineEdit_10.text()
self.number_11 = self.lineEdit_11.text()
self.number_12 = self.lineEdit_12.text()
self.key_task_crypto(key_pub)
def key_task_crypto(self, key_pub):
self.number_1_crypto = rsa.encrypt(self.number_1.encode('utf8'), key_pub)
self.number_2_crypto = rsa.encrypt(self.number_2.encode('utf8'), key_pub)
self.number_3_crypto = rsa.encrypt(self.number_3.encode('utf8'), key_pub)
self.number_4_crypto = rsa.encrypt(self.number_4.encode('utf8'), key_pub)
self.number_5_crypto = rsa.encrypt(self.number_5.encode('utf8'), key_pub)
self.number_6_crypto = rsa.encrypt(self.number_6.encode('utf8'), key_pub)
self.number_7_crypto = rsa.encrypt(self.number_7.encode('utf8'), key_pub)
self.number_8_crypto = rsa.encrypt(self.number_8.encode('utf8'), key_pub)
self.number_9_crypto = rsa.encrypt(self.number_9.encode('utf8'), key_pub)
self.number_10_crypto = rsa.encrypt(self.number_10.encode('utf8'), key_pub)
self.number_11_crypto = rsa.encrypt(self.number_11.encode('utf8'), key_pub)
self.number_12_crypto = rsa.encrypt(self.number_12.encode('utf8'), key_pub)
self.load_key_task_crypto()
def load_key_task_crypto(self):
k = [self.number_1_crypto, self.number_2_crypto, self.number_3_crypto, self.number_4_crypto,
self.number_5_crypto, self.number_6_crypto, self.number_7_crypto, self.number_8_crypto,
self.number_9_crypto, self.number_10_crypto, self.number_11_crypto, self.number_12_crypto]
directory_save_key = self.directory_key_check + self.name_file_key
with open(directory_save_key, "w") as f:
f.write("\n".join(base64.b64encode(item).decode('utf8') for item in k))
msg = QMessageBox()
msg.setIcon(QMessageBox.Information)
msg.setText("Информация")
msg.setInformativeText('Данные ключей ответов сохранены')
msg.setWindowTitle("Информация")
msg.exec_()
def app_key_task(self):
if not os.path.exists('key_priv.pem'):
msg = QMessageBox()
msg.setIcon(QMessageBox.Warning)
msg.setText("Ошибка")
msg.setInformativeText('ВНИМАНИЕ! Приватный ключ не найден'
'Попробуйте сгенерировать новый ключ.')
msg.setWindowTitle("Ошибка")
msg.exec_()
return
with open('key_priv.pem', "rb") as f:
_key_priv = f.read()
key_priv = self.key_priv.load_pkcs1(_key_priv)
directory_file, _ = QFileDialog.getOpenFileName(None, ".", "*.txt")
if not directory_file:
return
with open(directory_file, "r") as f:
lines = f.readlines()
for line in lines:
decrypted = rsa.decrypt(base64.b64decode(line.strip()), key_priv)
self.answers.append(decrypted.decode('utf8'))
name_file = os.path.basename(directory_file)
directory_file = os.path.dirname(directory_file) + "/"
self.lineEdit.setText(self.answers[0])
self.lineEdit_2.setText(self.answers[1])
self.lineEdit_3.setText(self.answers[2])
self.lineEdit_4.setText(self.answers[3])
self.lineEdit_5.setText(self.answers[4])
self.lineEdit_6.setText(self.answers[5])
self.lineEdit_7.setText(self.answers[6])
self.lineEdit_8.setText(self.answers[7])
self.lineEdit_9.setText(self.answers[8])
self.lineEdit_10.setText(self.answers[9])
self.lineEdit_11.setText(self.answers[10])
self.lineEdit_12.setText(self.answers[11])
self.lineEdit_14.setText(directory_file)
self.lineEdit_16.setText(name_file)
def func_generate_keys(self):
save_key_pub = self.key_pub.save_pkcs1()
with open('key_pub.pem', "wb") as f:
f.write(save_key_pub)
save_key_priv = self.key_priv.save_pkcs1()
with open('key_priv.pem', "wb") as f:
f.write(save_key_priv)
msg = QMessageBox()
msg.setIcon(QMessageBox.Information)
msg.setText("Информация")
msg.setInformativeText('Ключи шифрования и дешифровки созданны.'
'Отправте публичный ключ участникам ОГЭ')
msg.setWindowTitle("Информация")
msg.exec_()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
app.setStyle("Fusion")
w = MainWindow()
w.show()
sys.exit(app.exec_())
crypto.py: https://drive.google.com/file/d/1WOF20K3ulmFt0HorWf0Nj8CADTzUAX3l/view?usp=sharing
Update: Если упростить задачу и исключить дешифрование файлов, то можно представить так, на входе получаем список с переменными, в которых хранятся данные из строк, выглядит это примерно так:
Первые 12 переменных-это и есть ответы на задание, дальше идет информация о том, кто делал работу, дд.мм.гг, регион, код ОО, номер класса, литера класса, код ППЭ, номер аудитории, номер варианта, код предмета, название предмета, номер КИМ, фамилия, имя, отчество, серия(паспорта), номер(паспорта).
Каждый из пунктов перечисленных выше, находится на отдельных строчках.
Что бы начать проверку, нужно указать директорию где находятся файлы для проверки, после чего указать директорию куда сохранятся проверенные файлы и ввести в поля lineEdit правильные ответы, и в конце нажать на кнопку "Начать проверку", после чего программа переберет все файлы и в директории сохранения проверенных файлов будет создан новый текстовый файл по каждой работе, пример вывода данных:
№1: 0, №2: 1, №3: 1, №4: 1, №5: 0, №6: 0, №7: 0, №8: 0, №9: 1, №10: 1, №11: 1, №12: 1
№1: 120/№1: 120, №2: 1/№2: 1 *(так выводится правильная и неправильная комбинация, то есть первое число-это то, что ввел экзаменуемый, а второе число-это правильный ответ)*
Ниже располагаются остальные данные, перечисленные выше.
main.py:
from PyQt5 import QtCore, QtGui, QtWidgets
from FOTO import Ui_MainWindow
from PyQt5.Qt import *
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
ver.py:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'ver.ui'
#
# Created by: PyQt5 UI code generator 5.15.6
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(320, 484)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout_2 = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout_2.setObjectName("gridLayout_2")
self.gridLayout = QtWidgets.QGridLayout()
self.gridLayout.setObjectName("gridLayout")
self.lineEdit_3 = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_3.setObjectName("lineEdit_3")
self.gridLayout.addWidget(self.lineEdit_3, 10, 1, 1, 1)
self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_2.setObjectName("lineEdit_2")
self.gridLayout.addWidget(self.lineEdit_2, 11, 1, 1, 1)
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit.setObjectName("lineEdit")
self.gridLayout.addWidget(self.lineEdit, 0, 1, 1, 1)
self.label_11 = QtWidgets.QLabel(self.centralwidget)
self.label_11.setObjectName("label_11")
self.gridLayout.addWidget(self.label_11, 6, 0, 1, 1)
self.label_15 = QtWidgets.QLabel(self.centralwidget)
self.label_15.setObjectName("label_15")
self.gridLayout.addWidget(self.label_15, 10, 0, 1, 1)
self.label_14 = QtWidgets.QLabel(self.centralwidget)
self.label_14.setObjectName("label_14")
self.gridLayout.addWidget(self.label_14, 9, 0, 1, 1)
self.label_13 = QtWidgets.QLabel(self.centralwidget)
self.label_13.setObjectName("label_13")
self.gridLayout.addWidget(self.label_13, 8, 0, 1, 1)
self.label_12 = QtWidgets.QLabel(self.centralwidget)
self.label_12.setObjectName("label_12")
self.gridLayout.addWidget(self.label_12, 7, 0, 1, 1)
self.lineEdit_7 = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_7.setObjectName("lineEdit_7")
self.gridLayout.addWidget(self.lineEdit_7, 1, 1, 1, 1)
self.label_16 = QtWidgets.QLabel(self.centralwidget)
self.label_16.setObjectName("label_16")
self.gridLayout.addWidget(self.label_16, 11, 0, 1, 1)
self.lineEdit_14 = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_14.setObjectName("lineEdit_14")
self.gridLayout.addWidget(self.lineEdit_14, 4, 1, 1, 1)
self.lineEdit_13 = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_13.setObjectName("lineEdit_13")
self.gridLayout.addWidget(self.lineEdit_13, 3, 1, 1, 1)
self.lineEdit_15 = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_15.setObjectName("lineEdit_15")
self.gridLayout.addWidget(self.lineEdit_15, 5, 1, 1, 1)
self.lineEdit_12 = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_12.setObjectName("lineEdit_12")
self.gridLayout.addWidget(self.lineEdit_12, 2, 1, 1, 1)
self.lineEdit_16 = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_16.setObjectName("lineEdit_16")
self.gridLayout.addWidget(self.lineEdit_16, 6, 1, 1, 1)
self.lineEdit_18 = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_18.setObjectName("lineEdit_18")
self.gridLayout.addWidget(self.lineEdit_18, 8, 1, 1, 1)
self.lineEdit_19 = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_19.setObjectName("lineEdit_19")
self.gridLayout.addWidget(self.lineEdit_19, 9, 1, 1, 1)
self.label_3 = QtWidgets.QLabel(self.centralwidget)
self.label_3.setObjectName("label_3")
self.gridLayout.addWidget(self.label_3, 1, 0, 1, 1)
self.lineEdit_17 = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_17.setObjectName("lineEdit_17")
self.gridLayout.addWidget(self.lineEdit_17, 7, 1, 1, 1)
self.label_2 = QtWidgets.QLabel(self.centralwidget)
self.label_2.setObjectName("label_2")
self.gridLayout.addWidget(self.label_2, 2, 0, 1, 1)
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setObjectName("label")
self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
self.label_4 = QtWidgets.QLabel(self.centralwidget)
self.label_4.setObjectName("label_4")
self.gridLayout.addWidget(self.label_4, 3, 0, 1, 1)
self.label_10 = QtWidgets.QLabel(self.centralwidget)
self.label_10.setObjectName("label_10")
self.gridLayout.addWidget(self.label_10, 5, 0, 1, 1)
self.label_9 = QtWidgets.QLabel(self.centralwidget)
self.label_9.setObjectName("label_9")
self.gridLayout.addWidget(self.label_9, 4, 0, 1, 1)
self.lineEdit_32 = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_32.setObjectName("lineEdit_32")
self.gridLayout.addWidget(self.lineEdit_32, 12, 1, 1, 1)
self.label_17 = QtWidgets.QLabel(self.centralwidget)
self.label_17.setObjectName("label_17")
self.gridLayout.addWidget(self.label_17, 12, 0, 1, 1)
self.lineEdit_33 = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_33.setObjectName("lineEdit_33")
self.gridLayout.addWidget(self.lineEdit_33, 13, 1, 1, 1)
self.label_18 = QtWidgets.QLabel(self.centralwidget)
self.label_18.setObjectName("label_18")
self.gridLayout.addWidget(self.label_18, 13, 0, 1, 1)
self.gridLayout_2.addLayout(self.gridLayout, 0, 0, 1, 1)
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setObjectName("pushButton")
self.gridLayout_2.addWidget(self.pushButton, 1, 0, 1, 1)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 320, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.label_11.setText(_translate("MainWindow", "7"))
self.label_15.setText(_translate("MainWindow", "11"))
self.label_14.setText(_translate("MainWindow", "10"))
self.label_13.setText(_translate("MainWindow", "9"))
self.label_12.setText(_translate("MainWindow", "8"))
self.label_16.setText(_translate("MainWindow", "12"))
self.label_3.setText(_translate("MainWindow", "2"))
self.label_2.setText(_translate("MainWindow", "3"))
self.label.setText(_translate("MainWindow", "1"))
self.label_4.setText(_translate("MainWindow", "4"))
self.label_10.setText(_translate("MainWindow", "6"))
self.label_9.setText(_translate("MainWindow", "5"))
self.label_17.setText(_translate("MainWindow", "<html><head/><body><p>Директория файлов</p><p>для проверки</p></body></html>"))
self.label_18.setText(_translate("MainWindow", "<html><head/><body><p>Директория </p><p>провереных файлов</p></body></html>"))
self.pushButton.setText(_translate("MainWindow", "Начать проверку"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
Ответы (1 шт):
Что бы реализовать данный процесс необходимо задать директорию в которой будет проводится проверка. После этого код посчитает количество файлов с расширением .txt в данной директории и запишет их полный путь (ВАЖНО! В директории для проверки не должно быть посторонних файлов не содержащих зашифрованное сообщение). А после через цикл for перебираем все файлы и записываем результаты в новые файлы .txt.
main.py:
# -*- coding: utf-8 -*-
from PyQt5 import QtCore, QtGui, QtWidgets
from crypto import Ui_MainWindow
from PyQt5.Qt import *
import rsa
import base64
import os
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.answers = []
self.file_names = []
self.student_answers = []
self.result = []
self.comparison_responses = []
self.result_OGE = 0
self.setWindowTitle("Automatic OGE verification system ver.00.09.56")
self.btn_generate_keys.clicked.connect(self.func_generate_keys)
(self.key_pub, self.key_priv) = rsa.newkeys(512)
self.pushButton_2.clicked.connect(self.information)
self.pushButton_3.clicked.connect(self.app_key_task)
self.pushButton.clicked.connect(self.file_names_app)
def file_names_app(self):
self.directory_file_check = self.lineEdit_15.text()
try:
for file in os.listdir(self.directory_file_check):
if file.endswith(".txt"):
self.file_names.append(os.path.join(self.directory_file_check, file))
print(self.file_names)
except:
msg = QMessageBox()
msg.setIcon(QMessageBox.Warning)
msg.setText("Ошибка")
msg.setInformativeText('ВНИМАНИЕ! Поле "Директория файлов для проверки" не заполнено'
'Заполните поле для начала проверки')
msg.setWindowTitle("Ошибка")
msg.exec_()
finally:
self.verification()
def verification(self):
score_file = len(self.file_names)
file_order = 0
print(score_file)
print(file_order)
for i in range(0, score_file):
with open(self.file_names[file_order], "r") as f:
lines = f.readlines()
for line in lines:
decrypted = rsa.decrypt(base64.b64decode(line.strip()), self.key_priv)
self.student_answers.append(decrypted.decode('utf8'))
self.number_1 = self.lineEdit.text()
self.number_2 = self.lineEdit_2.text()
self.number_3 = self.lineEdit_3.text()
self.number_4 = self.lineEdit_4.text()
self.number_5 = self.lineEdit_5.text()
self.number_6 = self.lineEdit_6.text()
self.number_7 = self.lineEdit_7.text()
self.number_8 = self.lineEdit_8.text()
self.number_9 = self.lineEdit_9.text()
self.number_10 = self.lineEdit_10.text()
self.number_11 = self.lineEdit_11.text()
self.number_12 = self.lineEdit_12.text()
if str(self.number_1) == (self.student_answers[0]):
self.result.append("№1: 1")
self.result_OGE += 1
else:
self.result.append("№1: 0")
if str(self.number_2) == (self.student_answers[1]):
self.result.append("№2: 1")
self.result_OGE += 1
else:
self.result.append("№2: 0")
if str(self.number_3) == (self.student_answers[2]):
self.result.append("№3: 1")
self.result_OGE += 1
else:
self.result.append("№3: 0")
if str(self.number_4) == (self.student_answers[3]):
self.result.append("№4: 1")
self.result_OGE += 1
else:
self.result.append("№4: 0")
if str(self.number_5) == (self.student_answers[4]):
self.result.append("№5: 1")
self.result_OGE += 1
else:
self.result.append("№5: 0")
if str(self.number_6) == (self.student_answers[5]):
self.result.append("№6: 1")
self.result_OGE += 1
else:
self.result.append("№6: 0")
if str(self.number_7) == (self.student_answers[6]):
self.result.append("№7: 1")
self.result_OGE += 1
else:
self.result.append("№7: 0")
if str(self.number_8) == (self.student_answers[7]):
self.result.append("№8: 1")
self.result_OGE += 1
else:
self.result.append("№8: 0")
if str(self.number_9) == (self.student_answers[8]):
self.result.append("№9: 1")
self.result_OGE += 1
else:
self.result.append("№9: 0")
if str(self.number_10) == (self.student_answers[9]):
self.result.append("№10: 1")
self.result_OGE += 1
else:
self.result.append("№10: 0")
if str(self.number_11) == (self.student_answers[10]):
self.result.append("№11: 1")
self.result_OGE += 1
else:
self.result.append("№11: 0")
if str(self.number_12) == (self.student_answers[11]):
print(self.number_12, self.student_answers[11])
self.result.append("№12: 1")
self.result_OGE += 1
else:
self.result.append("№12: 0")
self.result.append("№13: ЗАДАНИЕ ПРОВЕРЯЕТСЯ ЭКСПЕРТОМ")
self.result.append("№14: ЗАДАНИЕ ПРОВЕРЯЕТСЯ ЭКСПЕРТОМ")
self.result.append("№15: ЗАДАНИЕ ПРОВЕРЯЕТСЯ ЭКСПЕРТОМ")
self.comparison_responses.append(self.number_1 + "/" + self.student_answers[0] + "," + self.number_2 + "/"
+ self.student_answers[1] + "," +
self.number_3 + "/" + self.student_answers[2] + "," + self.number_4 + "/"
+ self.student_answers[3] + "," +
self.number_5 + "/" + self.student_answers[4] + "," + self.number_6 + "/"
+ self.student_answers[5] + "," +
self.number_7 + "/" + self.student_answers[6] + "," + self.number_8 + "/"
+ self.student_answers[7] + "," +
self.number_9 + "/" + self.student_answers[8] + "," + self.number_10 + "/"
+ self.student_answers[9] + "," +
self.number_11 + "/" + self.student_answers[
10] + "," + self.number_12 + "/"
+ self.student_answers[11]
)
if self.result_OGE >= 0 and self.result_OGE <= 4:
self.score = 2
elif self.result_OGE >= 5 and self.result_OGE <= 11:
self.score = 3
elif self.result_OGE >= 12 and self.result_OGE <= 16:
self.score = 4
elif self.result_OGE >= 17 and self.result_OGE <= 19:
self.score = 5
else:
self.score = "Ошибка расчета оценки, обратитесь к техническому специалисту"
record_in_file = open(self.student_answers[23] + "_" + self.student_answers[24] + "_" +
self.student_answers[25] + "_" + self.student_answers[19] + ".txt", "a")
record_in_file.write("ПРОВЕРКА ВЫПОЛНЕНА В Automatic OGE verification system ver.00.09.56 " + "\n" + "\n" +
"Copyright Alexandrov Andrey" + "\n" + "\n" + str(self.result) + "\n" + "\n" +
"Результат проверки заданий с КРАТКИМ ОТВЕТОМ: " + str(self.result_OGE) + "\n" +
"Предварительная оценка за пробник ОГЭ: " + str(self.score) + "\n" +
"Правильные ответы/ответы ученика: " + str(self.comparison_responses) + "\n" + "\n" +
"Дата проведения (ДД-ММ-ГГ): " + self.student_answers[12] + "\n" + "Регион: " +
self.student_answers[13] + "\n" + "Код ОО: " + self.student_answers[14]
+ "\n" + "Номера класса: " + self.student_answers[15] + "\n" + "Буква класса: " +
self.student_answers[16] + "\n" + "Код пункта проведения: " + self.student_answers[
17] +
"\n" + "Номер аудитории" + self.student_answers[18] + "\n" + "Номер варианта: "
+ self.student_answers[19] + "\n" + "Код предмета: " + self.student_answers[20] +
"\n" + "Название предмета: " + self.student_answers[21] + "\n" + "Номер КИМ: "
+ self.student_answers[22] + "\n" + "Фамилия учащегося: " + self.student_answers[23] +
"\n" + "Имя учащегося: " + self.student_answers[24] + "\n" + "Очество учащегося: " +
self.student_answers[25] + "\n" + "Серия паспорта: " + self.student_answers[26]
+ "\n" + "Номер паспорта: " + self.student_answers[27] + "\n" +
"ВНИМАНИЕ ДАННАЯ ВЕРСИЯ ПРОГРАММА НАХОДИТСЯ В БЕТА ТЕСТИРОВАНИЕ." + "\n" +
"В НЕЙ МОГУТ ПРЕСУДСТВОВАТЬ НЕ РАБОЧИЕ ФУНКЦИИ" + "\n" +
"ПО ВОПРОСАМ УЛУЧШЕНИЯ ПО ОБРАЩАТСЯ НА ЭЛЕКТРОННУЮ ПОЧТУ: [email protected]"
)
record_in_file.close()
file_order += 1
print(file_order)
self.student_answers.clear()
def information(self):
if not os.path.exists('key_pub.pem'):
msg = QMessageBox()
msg.setIcon(QMessageBox.Warning)
msg.setText("Ошибка")
msg.setInformativeText('ВНИМАНИЕ! Публичный ключ не найден'
'Попробуйте сгенерировать новый ключ.')
msg.setWindowTitle("Ошибка")
msg.exec_()
return
with open('key_pub.pem', "rb") as f:
_key_pub = f.read()
key_pub = self.key_pub.load_pkcs1(_key_pub)
# self.bit_key = self.lineEdit_13.text()
self.directory_key_check = self.lineEdit_14.text()
self.name_file_key = self.lineEdit_16.text()
# self.directory_check_file = self.lineEdit_17
self.key_task(key_pub)
def key_task(self, key_pub):
self.number_1 = self.lineEdit.text()
self.number_2 = self.lineEdit_2.text()
self.number_3 = self.lineEdit_3.text()
self.number_4 = self.lineEdit_4.text()
self.number_5 = self.lineEdit_5.text()
self.number_6 = self.lineEdit_6.text()
self.number_7 = self.lineEdit_7.text()
self.number_8 = self.lineEdit_8.text()
self.number_9 = self.lineEdit_9.text()
self.number_10 = self.lineEdit_10.text()
self.number_11 = self.lineEdit_11.text()
self.number_12 = self.lineEdit_12.text()
self.key_task_crypto(key_pub)
def key_task_crypto(self, key_pub):
self.number_1_crypto = rsa.encrypt(self.number_1.encode('utf8'), key_pub)
self.number_2_crypto = rsa.encrypt(self.number_2.encode('utf8'), key_pub)
self.number_3_crypto = rsa.encrypt(self.number_3.encode('utf8'), key_pub)
self.number_4_crypto = rsa.encrypt(self.number_4.encode('utf8'), key_pub)
self.number_5_crypto = rsa.encrypt(self.number_5.encode('utf8'), key_pub)
self.number_6_crypto = rsa.encrypt(self.number_6.encode('utf8'), key_pub)
self.number_7_crypto = rsa.encrypt(self.number_7.encode('utf8'), key_pub)
self.number_8_crypto = rsa.encrypt(self.number_8.encode('utf8'), key_pub)
self.number_9_crypto = rsa.encrypt(self.number_9.encode('utf8'), key_pub)
self.number_10_crypto = rsa.encrypt(self.number_10.encode('utf8'), key_pub)
self.number_11_crypto = rsa.encrypt(self.number_11.encode('utf8'), key_pub)
self.number_12_crypto = rsa.encrypt(self.number_12.encode('utf8'), key_pub)
self.load_key_task_crypto()
def load_key_task_crypto(self):
k = [self.number_1_crypto, self.number_2_crypto, self.number_3_crypto, self.number_4_crypto,
self.number_5_crypto, self.number_6_crypto, self.number_7_crypto, self.number_8_crypto,
self.number_9_crypto, self.number_10_crypto, self.number_11_crypto, self.number_12_crypto]
directory_save_key = self.directory_key_check + self.name_file_key
with open(directory_save_key, "w") as f:
f.write("\n".join(base64.b64encode(item).decode('utf8') for item in k))
msg = QMessageBox()
msg.setIcon(QMessageBox.Information)
msg.setText("Информация")
msg.setInformativeText('Данные ключей ответов сохранены')
msg.setWindowTitle("Информация")
msg.exec_()
def app_key_task(self):
if not os.path.exists('key_priv.pem'):
msg = QMessageBox()
msg.setIcon(QMessageBox.Warning)
msg.setText("Ошибка")
msg.setInformativeText('ВНИМАНИЕ! Приватный ключ не найден'
'Попробуйте сгенерировать новый ключ.')
msg.setWindowTitle("Ошибка")
msg.exec_()
return
with open('key_priv.pem', "rb") as f:
_key_priv = f.read()
self.key_priv = self.key_priv.load_pkcs1(_key_priv)
directory_file, _ = QFileDialog.getOpenFileName(None, ".", "*.txt")
if not directory_file:
return
with open(directory_file, "r") as f:
lines = f.readlines()
for line in lines:
decrypted = rsa.decrypt(base64.b64decode(line.strip()), self.key_priv)
self.answers.append(decrypted.decode('utf8'))
print(self.answers)
name_file = os.path.basename(directory_file)
directory_file = os.path.dirname(directory_file) + "/"
self.lineEdit.setText(self.answers[0])
self.lineEdit_2.setText(self.answers[1])
self.lineEdit_3.setText(self.answers[2])
self.lineEdit_4.setText(self.answers[3])
self.lineEdit_5.setText(self.answers[4])
self.lineEdit_6.setText(self.answers[5])
self.lineEdit_7.setText(self.answers[6])
self.lineEdit_8.setText(self.answers[7])
self.lineEdit_9.setText(self.answers[8])
self.lineEdit_10.setText(self.answers[9])
self.lineEdit_11.setText(self.answers[10])
self.lineEdit_12.setText(self.answers[11])
self.lineEdit_14.setText(directory_file)
self.lineEdit_16.setText(name_file)
def func_generate_keys(self):
save_key_pub = self.key_pub.save_pkcs1()
with open('key_pub.pem', "wb") as f:
f.write(save_key_pub)
save_key_priv = self.key_priv.save_pkcs1()
with open('key_priv.pem', "wb") as f:
f.write(save_key_priv)
msg = QMessageBox()
msg.setIcon(QMessageBox.Information)
msg.setText("Информация")
msg.setInformativeText('Ключи шифрования и дешифровки созданны.'
'Отправте публичный ключ участникам ОГЭ')
msg.setWindowTitle("Информация")
msg.exec_()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
app.setStyle("Fusion")
w = MainWindow()
w.show()
sys.exit(app.exec_()
)