Resource icon

Software Email Statistics @fr33d4t4 1.0

No permission to download
Простой софт, написанный чатом GPT для просмотра статистики доменов в базе
Не знаю почему вт грязноватый, вот исходный код софта:
Python:
import sys
import locale
locale.setlocale(locale.LC_ALL, 'en_US')
from PyQt5.QtWidgets import QApplication, QWidget, QFileDialog, QVBoxLayout, QTableWidget, QTableWidgetItem, \
    QPushButton, QHeaderView, QLabel
from PyQt5.QtCore import Qt, QThread, pyqtSignal


class FileLoader(QThread):
    updateTable = pyqtSignal(dict)

    def __init__(self, filename):
        super().__init__()
        self.filename = filename

    def run(self):
        domains = {}
        try:
            with open(self.filename, 'r', encoding='utf-8', errors='ignore') as f:
                for line in f:
                    try:
                        email, password = line.strip().split(':')
                        email = email.lower()
                    except ValueError:
                        continue

                    domain = email.split('@')[-1]
                    if domain in domains:
                        domains[domain]['count'] += 1
                    else:
                        domains[domain] = {'count': 1, 'percentage': 0}

                total = sum([domain['count'] for domain in domains.values()])

                for domain in domains.values():
                    domain['percentage'] = domain['count'] / total * 100

                sorted_domains = sorted(domains.items(), key=lambda x: x[1]['percentage'], reverse=True)

                domain_data = {}
                for i, (domain, stats) in enumerate(sorted_domains):
                    domain_data[i] = (domain, stats['count'], f'{stats["percentage"]:.2f}%')

                self.updateTable.emit(domain_data)

        except Exception as e:
            self.updateTable.emit({-1: (f'Error: {e}', '', '')})


class EmailStats(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('Email Statistics @fr33d4t4')
        self.resize(400, 500)

        self.table = QTableWidget(self)
        self.table.setColumnCount(3)
        self.table.setHorizontalHeaderLabels(['Domain', 'Count', 'Percentage'])
        self.table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)

        self.load_button = QPushButton('Load File', self)
        self.load_button.clicked.connect(self.loadFile)

        vbox = QVBoxLayout()
        vbox.addWidget(self.load_button)
        vbox.addWidget(self.table)

        self.num_rows_label = QLabel(self)
        self.num_rows_label.setAlignment(Qt.AlignRight)
        vbox.addWidget(self.num_rows_label)

        self.setLayout(vbox)

        self.setAcceptDrops(True)

    def dragEnterEvent(self, event):
        if event.mimeData().hasUrls():
            event.accept()
        else:
            event.ignore()

    def dropEvent(self, event):
        filename = event.mimeData().urls()[0].toLocalFile()
        self.loadFile(filename)

    def loadFile(self, filename=None):
        if not filename:
            filename, _ = QFileDialog.getOpenFileName(self, 'Open File', '', 'Text Files (*.txt)')

        if filename:
            try:
                self.num_rows_label.setText('Loading file...')
                self.fileLoader = FileLoader(filename)
                self.fileLoader.updateTable.connect(self.updateTable)
                self.fileLoader.start()

            except Exception as e:
                self.table.setRowCount(0)
                self.table.setColumnCount(0)
                self.table.setHorizontalHeaderLabels([])
                self.table.setRowCount(1)
                self.table.setItem(0, 0, QTableWidgetItem(f'Error: {e}'))
                self.table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)

    def updateTable(self, domain_data):
        self.table.setRowCount(0)
        self.table.setRowCount(len(domain_data))
        self.table.setColumnCount(3)
        self.table.setHorizontalHeaderLabels(['Domain', 'Count', 'Percentage'])
        self.table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)

        for i, data in domain_data.items():
            if i == -1:
                self.table.setRowCount(1)
                self.table.setItem(0, 0, QTableWidgetItem(data[0]))
                self.table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
            else:
                self.table.setItem(i, 0, QTableWidgetItem(data[0]))
                self.table.setItem(i, 1, QTableWidgetItem(str(data[1])))
                self.table.setItem(i, 2, QTableWidgetItem(data[2]))

        num_rows = self.table.rowCount()
        self.num_rows_label.setText(f'{num_rows} rows')

        # add total count of emails
        if num_rows > 0:
            count = sum(int(self.table.item(i, 1).text()) for i in range(num_rows))
            formatted_count = locale.format_string('%d', count, grouping=True)
            self.num_rows_label.setText(
                f'{locale.format_string("%d", num_rows, grouping=True)} domains ({formatted_count} emails)')



if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = EmailStats()
    ex.show()
    sys.exit(app.exec_())

Запаковал в exe через auto-py-to-exe
  • Screenshot 2023-02-26 161208.png
    Screenshot 2023-02-26 161208.png
    21.6 KB · Views: 61
Author
Saladelov
Downloads
11
Views
943
First release
Last update
Rating
0.00 star(s) 0 ratings