diff --git a/pyminer2/extensions/packages/dataio/dataImportModel.py b/pyminer2/extensions/packages/dataio/dataImportModel.py index db2a9e52220c925a25e9eeb7e9c88952d08cedbb..02d47fed3de51ef970bba1096b9fdbe7ff586186 100644 --- a/pyminer2/extensions/packages/dataio/dataImportModel.py +++ b/pyminer2/extensions/packages/dataio/dataImportModel.py @@ -102,6 +102,28 @@ class Ui_Form(object): pass ###### 动态生成参数模块 + def publicUIFormActivity(self): + # 导入窗口的相关事件 + # 在"导入"窗口,打开选择文件 + self.pushButton_choosefile.clicked.connect(self.chooseFileButton) + + # 帮助 + self.pushButton_help.clicked.connect(self.showHelp) + + # 按键更新数据 + self.pushButton_preview.clicked.connect(self.previewButton) # 预览 + self.pushButton_ok.clicked.connect(self.importDatasetButton) # 导入 + self.pushButton_cancel.clicked.connect(self.close) # 取消 + + def chooseFileButton(self): + pass + def showHelp(self): + pass + def previewButton(self): + pass + def importDatasetButton(self): + pass + def setupUi(self, Form): # 公共模块 Form.resize(800, 630) diff --git a/pyminer2/extensions/packages/dataio/sample.py b/pyminer2/extensions/packages/dataio/sample.py index eb39e41c66ef8aed32a0fdc6e7638f5dbd2c5dc1..8ee33a58104337ddc0ef9495304610f1b225f161 100644 --- a/pyminer2/extensions/packages/dataio/sample.py +++ b/pyminer2/extensions/packages/dataio/sample.py @@ -1,35 +1,15 @@ # -*- encoding: utf-8 -*- import logging -import sys import time -import typing import os import openpyxl import xlrd -import scipy.io as sio from qtpy.QtWidgets import * import numpy as np import pandas as pd -from pyminer2.core import read_matlab, read_stata, dataframe from pyminer_comm import set_var from dataImportModel import Ui_Form as dataImportFormEngine -if typing.TYPE_CHECKING: - from .dataUI.data_import_csv import Ui_Form as CsvImport_Ui_Form - from .dataUI.data_import_excel import Ui_Form as ExcelImport_Ui_Form - from .dataUI.data_import_matlab import Ui_Form as MATLABImport_Ui_Form - from .dataUI.data_import_stata import Ui_Form as STATAImport_Ui_Form - from .dataUI.data_import_sas import Ui_Form as SASImport_Ui_Form - from .dataUI.data_import_spss import Ui_Form as SPSSImport_Ui_Form - from .dataUI.data_import_text import Ui_Form as Import_Ui_Form -else: - from dataUI.data_import_csv import Ui_Form as CsvImport_Ui_Form - from dataUI.data_import_excel import Ui_Form as ExcelImport_Ui_Form - from dataUI.data_import_matlab import Ui_Form as MATLABImport_Ui_Form - from dataUI.data_import_stata import Ui_Form as STATAImport_Ui_Form - from dataUI.data_import_sas import Ui_Form as SASImport_Ui_Form - from dataUI.data_import_spss import Ui_Form as SPSSImport_Ui_Form - from dataUI.data_import_text import Ui_Form as Import_Ui_Form # 导入PyQt5模块 from qtpy.QtCore import * @@ -131,7 +111,7 @@ class ImportDialog(QDialog): self.importDatasetLoad() self.sendDataset() t1 = time.time() - logger.info("time elapsed for importing dataset: {t} s size {m} MB".format( + logger.info("导入数据集所用时间: {t} s 大小 {m} MB".format( t=round(t1 - t0, 2), m=round(sys.getsizeof(self.current_dataset) / 1024, 2) )) self.current_dataset = None @@ -418,7 +398,7 @@ class ImportDialog(QDialog): self.updateDatabaseConnectStatusLabel(error) self.sendDataset() t1 = time.time() - logger.info("time elapsed for importing dataset: {t} s size {m} MB".format( + logger.info("导入数据集所用时间: {t} s 大小 {m} MB".format( t=round(t1 - t0, 2), m=round(sys.getsizeof(self.current_dataset) / 1024, 2) )) self.current_dataset = None @@ -467,24 +447,12 @@ class ImportTextForm(ImportDialog, dataImportFormEngine): self.updateUIForm() def AddUIFormActivity(self): - # # 导入窗口的相关事件 - # 在"导入"窗口,打开选择文件 - self.pushButton_choosefile.clicked.connect(self.chooseFileButton) - - # 帮助 - self.pushButton_help.clicked.connect(self.showHelp) - - # 配置更新数据 + """增加界面中的操作操作响应""" self.checkBox_ifColumns.stateChanged.connect(self.updateTableView) # 选择首行是否为列名 self.checkBox_asString.stateChanged.connect(self.previewButton) # 是否以文本形式导入 self.comboBox_encode.currentTextChanged.connect(self.previewButton) # 选择编码方式 self.comboBox_separator.currentTextChanged.connect(self.previewButton) # 选择分割符号 - # 按键更新数据 - self.pushButton_preview.clicked.connect(self.previewButton) # 预览 - self.pushButton_ok.clicked.connect(self.importDatasetButton) # 导入 - self.pushButton_cancel.clicked.connect(self.close) # 取消 - def updateUIForm(self): """ImportTextForm配置参数部分""" separator_char = ["\\n"] + self.separator_char @@ -499,6 +467,7 @@ class ImportTextForm(ImportDialog, dataImportFormEngine): self.verticalLayoutAddUI(self.lineEdit_skipRow, "left") self.verticalLayoutAddUI(self.comboBox_separator, "right") self.verticalLayoutAddUI(self.comboBox_encode, "right") + self.publicUIFormActivity() self.AddUIFormActivity() def getImportParam(self): @@ -550,7 +519,7 @@ class ImportTextForm(ImportDialog, dataImportFormEngine): 刷新预览数据 """ # 处理需要呈现的内容 - self.tableWidget_previewData.clear() + self.clearPreviewDataTableWidget() if not self.import_param["status"]: return @@ -568,10 +537,7 @@ class ImportTextForm(ImportDialog, dataImportFormEngine): # 优化完成 class ImportCsvForm(ImportDialog, dataImportFormEngine): - """ - "导入CSV"窗口 - """ - + """导入CSV窗口""" def __init__(self, parent=None): self.IconPath = ":/color/source/theme/color/icons/csv.svg" self.file_types = "*.csv" @@ -582,24 +548,12 @@ class ImportCsvForm(ImportDialog, dataImportFormEngine): self.updateUIForm() def AddUIFormActivity(self): - # 导入窗口的相关事件 - # 在"导入"窗口,打开选择文件 - self.pushButton_choosefile.clicked.connect(self.chooseFileButton) - - # 帮助 - self.pushButton_help.clicked.connect(self.showHelp) - - # 配置更新数据 + """增加界面中的操作操作响应""" self.checkBox_ifColumns.stateChanged.connect(self.updateTableView) # 选择首行是否为列名 self.checkBox_ifColIndex.stateChanged.connect(self.previewButton) # 首列是否为列名 self.comboBox_encode.currentTextChanged.connect(self.previewButton) # 选择编码方式 self.comboBox_separator.currentTextChanged.connect(self.previewButton) # 选择分割符号 - # 按键更新数据 - self.pushButton_preview.clicked.connect(self.previewButton) # 预览 - self.pushButton_ok.clicked.connect(self.importDatasetButton) # 导入 - self.pushButton_cancel.clicked.connect(self.close) # 取消 - def updateUIForm(self): """ImportTextForm配置参数部分""" self.comboBox_separator = self.updateForm_ComboBox(self.comboBox_separator, self.separator_char) @@ -613,7 +567,7 @@ class ImportCsvForm(ImportDialog, dataImportFormEngine): self.verticalLayoutAddUI(self.lineEdit_skipRow, "left") self.verticalLayoutAddUI(self.comboBox_separator, "right") self.verticalLayoutAddUI(self.comboBox_encode, "right") - + self.publicUIFormActivity() self.AddUIFormActivity() def getImportParam(self): @@ -658,7 +612,7 @@ class ImportCsvForm(ImportDialog, dataImportFormEngine): 刷新预览数据 """ # 处理需要呈现的内容 - self.tableWidget_previewData.clear() + self.clearPreviewDataTableWidget() if not self.import_param["status"]: return @@ -673,13 +627,9 @@ class ImportCsvForm(ImportDialog, dataImportFormEngine): self.showDatasetPreview(data=preview_data, header=header) - # 后续还需要进一步优化方案 class ImportExcelForm(ImportDialog, dataImportFormEngine): - """ - 打开"从excel导入"窗口 - """ - + """打开excel导入窗口""" def __init__(self, parent=None): super().__init__(parent) self.IconPath = ":/color/source/theme/color/icons/excel.svg" @@ -692,26 +642,13 @@ class ImportExcelForm(ImportDialog, dataImportFormEngine): self.updateUIForm() def AddUIFormActivity(self): - # 导入窗口的相关事件 - # 在"导入"窗口,打开选择文件 - self.pushButton_choosefile.clicked.connect(self.chooseFileButton) - - # 帮助 - self.pushButton_help.clicked.connect(self.showHelp) - - # 配置更新数据 + """增加界面中的操作操作响应""" self.checkBox_ifColumns.stateChanged.connect(self.updateTableView) # 选择首行是否为列名 self.checkBox_ifColIndex.stateChanged.connect(self.previewButton) # 首列是否为列名 self.comboBox_sheetname.currentTextChanged.connect(self.updateTableView) # 切换页面 - # 按键更新数据 - self.pushButton_preview.clicked.connect(self.previewButton) # 预览 - self.pushButton_ok.clicked.connect(self.importDatasetButton) # 导入 - self.pushButton_cancel.clicked.connect(self.close) # 取消 - def updateUIForm(self): """ImportTextForm配置参数部分""" - self.horizontalLayoutAddUI(self.checkBox_ifColumns) # 首行为列名 self.horizontalLayoutAddUI(self.checkBox_ifColIndex) # 首列为行名 @@ -719,7 +656,7 @@ class ImportExcelForm(ImportDialog, dataImportFormEngine): self.verticalLayoutAddUI(self.comboBox_sheetname, "right") # 页面名称 self.verticalLayoutAddUI(self.lineEdit_limitRow, "left") # 限制行数 self.verticalLayoutAddUI(self.lineEdit_skipRow, "right") # 跳过行数 - + self.publicUIFormActivity() self.AddUIFormActivity() def getImportParam(self): @@ -756,7 +693,6 @@ class ImportExcelForm(ImportDialog, dataImportFormEngine): self.LoadSheetname() def LoadSheetname(self): - """预先加载 sheetname 信息""" ftype = os.path.split(self.import_param["filepath"])[1].endswith("xls") # 获取excel 工作簿中所有的sheet,设置 sheet 名 @@ -866,22 +802,10 @@ class ImportSpssForm(ImportDialog, dataImportFormEngine): self.updateUIForm() def AddUIFormActivity(self): - # 导入窗口的相关事件 - # 在"导入"窗口,打开选择文件 - self.pushButton_choosefile.clicked.connect(self.chooseFileButton) - - # 帮助 - self.pushButton_help.clicked.connect(self.showHelp) - - # 配置更新数据 + """增加界面中的操作操作响应""" self.checkBox_ifColumns.stateChanged.connect(self.updateTableView) # 选择首行是否为列名 self.comboBox_encode.currentIndexChanged.connect(self.previewButton) # 选择编码方式 - # 按键更新数据 - self.pushButton_preview.clicked.connect(self.previewButton) # 预览 - self.pushButton_ok.clicked.connect(self.importDatasetButton) # 导入 - self.pushButton_cancel.clicked.connect(self.close) # 取消 - def updateUIForm(self): """ImportTextForm配置参数部分""" self.encode_type = ["gbk", "utf8", "gb2312", "ascii"] @@ -892,6 +816,7 @@ class ImportSpssForm(ImportDialog, dataImportFormEngine): self.verticalLayoutAddUI(self.comboBox_encode, "right") self.verticalLayoutAddUI(self.lineEdit_limitRow, "left") self.verticalLayoutAddUI(self.lineEdit_skipRow, "right") + self.publicUIFormActivity() self.AddUIFormActivity() def getImportParam(self): @@ -931,20 +856,16 @@ class ImportSpssForm(ImportDialog, dataImportFormEngine): 刷新预览数据 """ # 处理需要呈现的内容 - self.tableWidget_previewData.clear() + self.clearPreviewDataTableWidget() if not self.import_param["status"]: return name = self.import_param["datasetname"] self.showDatasetPreview(data=self.current_dataset[name], header=True) - # 优化完成 class ImportSasForm(ImportDialog, dataImportFormEngine): - """ - 打开"从sas导入"窗口 - """ - + """打开从sas导入窗口""" def __init__(self, parent=None): super().__init__(parent) self.file_types = "*.sas7bdat" @@ -1017,20 +938,16 @@ class ImportSasForm(ImportDialog, dataImportFormEngine): 刷新预览数据 """ # 处理需要呈现的内容 - self.tableWidget_previewData.clear() + self.clearPreviewDataTableWidget() if not self.import_param["status"]: return name = self.import_param["datasetname"] self.showDatasetPreview(data=self.current_dataset[name], header=True) - # 优化完成 class ImportMatlabForm(ImportDialog, dataImportFormEngine): - """ - "从matlab导入"数据集到工作空间 - """ - + """打开matlab导入窗口""" def __init__(self, parent=None): super().__init__(parent) self.new_import_filepath = "" @@ -1042,28 +959,16 @@ class ImportMatlabForm(ImportDialog, dataImportFormEngine): self.updateUIForm() def AddUIFormActivity(self): - # 导入窗口的相关事件 - # 在"导入"窗口,打开选择文件 - self.pushButton_choosefile.clicked.connect(self.chooseFileButton) - - # 帮助 - self.pushButton_help.clicked.connect(self.showHelp) - - # 配置更新数据 + """增加界面中的操作操作响应""" self.checkBox_asDataFrame.stateChanged.connect(self.updateTableView) # 选择首行是否为列名 self.comboBox_varname.currentTextChanged.connect(self.updateTableView) - # 按键更新数据 - self.pushButton_preview.clicked.connect(self.previewButton) # 预览 - self.pushButton_ok.clicked.connect(self.importDatasetButton) # 导入 - self.pushButton_cancel.clicked.connect(self.close) # 取消 - def updateUIForm(self): """ImportMatlabForm配置参数部分""" - self.horizontalLayoutAddUI(self.checkBox_asDataFrame) self.verticalLayoutAddUI(self.lineEdit_datasetName, "left") self.verticalLayoutAddUI(self.comboBox_varname, "right") + self.publicUIFormActivity() self.AddUIFormActivity() def getImportParam(self): @@ -1113,8 +1018,7 @@ class ImportMatlabForm(ImportDialog, dataImportFormEngine): if not self.import_param["ispreview"]: for name_i, var_i in self.current_dataset.items(): - self.current_dataset[name_i] = pd.DataFrame(var_i) if self.import_param["asdataframe"] and len( - var_i.shape) <= 2 else var_i + self.current_dataset[name_i] = pd.DataFrame(var_i) if self.import_param["asdataframe"] and len(var_i.shape) <= 2 else var_i varname = self.comboBox_varname.currentText() if varname != "(全部导入)": self.import_param.update(ismerge=False) @@ -1129,10 +1033,6 @@ class ImportMatlabForm(ImportDialog, dataImportFormEngine): # 处理需要呈现的内容 varname = self.comboBox_varname.currentText() - print({"ispreview": self.import_param["ispreview"], "varname": varname, - "import_param": self.import_param["status"], - "dataset": list(self.current_dataset) - }) self.clearPreviewDataTableWidget() self.updateDatasetNameLine(tag=varname) if not self.import_param["status"]: @@ -1159,39 +1059,28 @@ class ImportMatlabForm(ImportDialog, dataImportFormEngine): preview_data = temp self.showDatasetPreview(data=preview_data, header=True) - # 优化完成 -class ImportStataForm(ImportDialog, STATAImport_Ui_Form): - """ - "从stata导入"数据集到工作空间 - """ - +class ImportStataForm(ImportDialog, dataImportFormEngine): + """打开stata导入窗口""" def __init__(self, parent=None): super().__init__(parent) + self.file_types = "*.dta" + self.IconPath = ":/color/source/theme/color/icons/stata.svg" self.setupUi(self) self.center() self.clearImportParam() - self.file_types = "*.dta" - # # 导入窗口的相关事件 - # 在"导入"窗口,打开选择文件 - self.pushButton_choosefile.clicked.connect(self.chooseFileButton) - - # 配置更新数据 - # self.checkBox_ifColumns.stateChanged.connect(self.updateTableView) # 首行是否为列名 - self.comboBox_encode.currentTextChanged['QString'].connect(self.previewButton) - - # self.lineEdit_filePath.textChanged['QString'].connect(self.import_dateset_reload) - # self.lineEdit_passHead.textChanged['QString'].connect(self.import_dateset_reload) - # self.lineEdit_datasetName.textChanged['QString'].connect(self.import_dateset_reload) - # self.lineEdit_limitRow.textChanged['QString'].connect(self.import_dateset_reload) + self.updateUIForm() - # 按键更新数据 - self.pushButton_preview.clicked.connect(self.previewButton) # 预览 - self.pushButton_ok.clicked.connect(self.importDatasetButton) # 导入 - self.pushButton_cancel.clicked.connect(self.close) # 取消 + def AddUIFormActivity(self): + """增加界面中的操作操作响应""" + self.checkBox_ifColIndex.stateChanged.connect(self.updateTableView) # 选择首行是否为列名 - # 帮助 - self.pushButton_help.clicked.connect(self.showHelp) + def updateUIForm(self): + """ImportMatlabForm配置参数部分""" + self.horizontalLayoutAddUI(self.checkBox_ifColIndex) + self.verticalLayoutAddUI(self.lineEdit_datasetName, "left") + self.publicUIFormActivity() + self.AddUIFormActivity() def getImportParam(self): """ @@ -1205,7 +1094,8 @@ class ImportStataForm(ImportDialog, STATAImport_Ui_Form): hasheader=True, status=False, varname={}, dtypes={}, param={ - "filepath_or_buffer": self.checkFilePath(self.lineEdit_filePath.text()) + "filepath_or_buffer": self.checkFilePath(self.lineEdit_filePath.text()), + "index_col": 0 if self.checkBox_ifColIndex.isChecked() else None } ) @@ -1226,7 +1116,7 @@ class ImportStataForm(ImportDialog, STATAImport_Ui_Form): 刷新预览数据 """ # 处理需要呈现的内容 - self.tableWidget_previewData.clear() + self.clearPreviewDataTableWidget() if not self.import_param["status"]: return