/
bulstray
/
CSVcleaner
Обзор
Документация
Войти
/
bulstray
/
CSVcleaner
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
app/window.py
314 строк
9 KB
Bulstray
update all
12 янв 2026, 13:00
12 янв 2026, 13:00
484ea76
Код
Авторство
О чём код?
import os from pathlib import Path from PyQt6.QtWidgets import (QWidget, QVBoxLayout, QLabel, QHBoxLayout, QFileDialog, QMessageBox, QCheckBox) from PyQt6.QtCore import Qt from app.config_app.config import set_config from construct_helper.data_resolution import Resolution from models.button_model.button import button_model from models.model_label_text.label_text import label_text from models.line_edit_model.line_eidt import line_edit_model import pandas as pd from datetime import datetime class MainWindow(QWidget): def __init__(self, resolution: Resolution): super().__init__() self.__resolution = resolution self.setup_ui() @property def resolution(self): return self.__resolution def setup_ui(self): set_config(main_window=self) main_grid = QHBoxLayout(self) main_grid.setSpacing(0) main_label = QLabel() main_label.setStyleSheet('background-color: #343434; padding: 0px;') label1 = QLabel() label2 = QLabel() label1.setStyleSheet('background-color: #343434') label2.setStyleSheet('background-color: #343434') main_grid.addWidget(label1, 1) main_grid.addWidget(main_label, 2) main_grid.addWidget(label2, 1) content_box = QVBoxLayout(main_label) content_box.setSpacing(0) content_box.setAlignment(Qt.AlignmentFlag.AlignTop) slim_docx_text = label_text( text='CSVCleaner', resolutions=self.resolution, font_size=60, font_weight=700, color='#FFFFFF', font_family='Verdana, regular', background_color=None, border=0, ) content_box.addWidget(slim_docx_text, 0, Qt.AlignmentFlag.AlignLeft) ramil_text = label_text( text='by <b>Казань&Геофизика</b>', resolutions=self.resolution, font_size=20, color='#FFFFFF', background_color=None, padding=0, margin=0, border=0, font_family='Verdana, regular', margin_top=30 ) content_box.addWidget(ramil_text, 0, Qt.AlignmentFlag.AlignLeft) compress_text = label_text( text='Нормализация .csv файла', resolutions=self.resolution, font_size=22, color='#d0caca', margin_top=27 ) content_box.addWidget(compress_text, 0, Qt.AlignmentFlag.AlignLeft) load_file_text = label_text( text='<b>Выберите папку</b>', resolutions=self.resolution, font_size=26, color='#FFFFFF', background_color=None, margin_top=70, ) content_box.addWidget(load_file_text, 0, Qt.AlignmentFlag.AlignLeft) box_line_edit = QHBoxLayout() self.line_edit = line_edit_model( text='Путь к папке', resolution=self.resolution, margin_top=15, border_radius=20, background_color='#FFFFFF', font_size=12, font_family='Verdana', color='#636060' ) box_line_edit.addWidget(self.line_edit, 0, Qt.AlignmentFlag.AlignLeft) self.button = button_model( text='Browse', resolution=self.resolution, hover_color='#273a73', w=110, h=70, border_radius=18, color='#ccced6', font_size=14, margin_top=15, border='4px solid #09b587', background_color='#385cc6', font_family='Verdana' ) self.button.clicked.connect(self.select_folder) box_line_edit.addWidget(self.button) content_box.addLayout(box_line_edit) self.checkbox_avg = QCheckBox('Осреднять значения по времени') self.checkbox_avg.setStyleSheet(""" QCheckBox::indicator { width: 20px; height: 20px; border-radius: 5px; border: 3px solid white; background-color: white } QCheckBox {margin: 15px; font-size: 18px; color: white;} QCheckBox::indicator:checked { border: 3px solid white; background-color: black; } """) content_box.addWidget(self.checkbox_avg, 0, Qt.AlignmentFlag.AlignLeft) box_buttons = QHBoxLayout() box_buttons.setSpacing(0) box_buttons.setAlignment(Qt.AlignmentFlag.AlignRight) button_clear = button_model( text='Clear', resolution=self.resolution, hover_color='none', w=130, h=80, color='#a3a4a8', font_size=19, margin_top=25, background_color='none', border='none', font_family='Verdana' ) button_clear.clicked.connect(self.clear_line_edit) box_buttons.addWidget(button_clear, 0, Qt.AlignmentFlag.AlignRight) self.button_submit = button_model( text='Apply', resolution=self.resolution, hover_color='#273a73', w=150, h=80, border_radius=25, color='#ccced6', font_size=16, margin_top=25, border='20px solid #3957d7', background_color='#385cc6', font_family='Verdana' ) self.button_submit.clicked.connect(self.apply_folder) box_buttons.addWidget(self.button_submit, 0, Qt.AlignmentFlag.AlignRight) content_box.addLayout(box_buttons) def clear_line_edit(self): self.line_edit.setText('Путь к папке') def select_folder(self): folder = QFileDialog.getExistingDirectory(self, 'Выберите папку') if folder: self.line_edit.setText(folder) def apply_folder(self): if self.checkbox_avg.isChecked(): self.apply_folder_with_avg() return import_folder = self.line_edit.text() import_folder = Path(import_folder) if import_folder == 'Путь к папке': return export_folder = os.path.join(import_folder, 'Convert') if not os.path.isdir(export_folder): os.mkdir(export_folder) for file in os.listdir(import_folder): if not file.endswith('.csv'): continue full_file = os.path.join(import_folder, file) new_file = os.path.join(export_folder, f'{Path(full_file).stem}.csv') with (open(file=full_file, encoding='utf-8', mode='r') as read_csv, open(file=new_file, encoding='utf-8', mode='w') as write_csv): for i, row in enumerate(read_csv): if i == 0: write_csv.write(row) continue new_row = [] for elem_row in row.strip().split(', '): elem_row = elem_row.strip().replace(',', '.') new_row.append(elem_row) write_csv.write(','.join(new_row)) write_csv.write('\n') QMessageBox.information( None, 'Успешно', 'Успешно, данные были успешно сохраненны' ) self.button_submit.setEnabled(True) self.button.setEnabled(True) def apply_folder_with_avg(self): import_folder = self.line_edit.text() import_folder = Path(import_folder) if import_folder == 'Путь к папке': return export_folder = os.path.join(import_folder, 'Convert') if not os.path.isdir(export_folder): os.mkdir(export_folder) for file in os.listdir(import_folder): if not file.endswith('.csv'): continue full_file = os.path.join(import_folder, file) new_file = os.path.join(export_folder, f'{Path(full_file).stem}.csv') with open(file=full_file, encoding='utf-8', mode='r') as read_csv: data = [] for i, row in enumerate(read_csv): if i == 0: continue new_row = [] for j, elem_row in enumerate(row.strip().split(', ')): elem_row = elem_row.strip().replace(',', '.') if j == 0: new_row.append(datetime.strptime(elem_row, '%Y-%m-%d %H:%M:%S')) continue new_row.append(float(elem_row)) data.append(new_row) header = ['Time', 'magneticX', 'magneticY', 'magneticZ', 'magneticTotal', 'longtitude', 'latitude', 'altitude'] data = pd.DataFrame(data, columns=header) data = data.groupby('Time').mean() data.to_csv(new_file) QMessageBox.information( None, 'Успешно', 'Успешно, данные были успешно сохраненны' ) # write_csv.write(','.join(new_row)) # write_csv.write('\n') self.button_submit.setEnabled(True) self.button.setEnabled(True)