要获取并过滤数据,可以使用 Python 处理各种数据格式(如 JSON、CSV 等)。以下是一些示例,演示如何从文件中获取数据并根据特定条件进行过滤。

获取过滤数据_数据

1、问题背景

在 Qt 中,QSortFilterProxyModel 用于对数据进行过滤和排序。当您使用 QSortFilterProxyModel 时,您可能会遇到这样的问题:如何获取过滤后的数据?例如,您可能需要将过滤后的数据导出到另一个文件中。

2、解决方案

要获取过滤后的数据,您可以使用 QSortFilterProxyModel 的 rowCount、columnCount 和 data 方法。这些方法可以帮助您访问 QSortFilterProxyModel 中的数据。

您可以使用以下步骤来获取过滤后的数据:

  1. 获取 QSortFilterProxyModel 的 rowCount 和 columnCount。这将告诉您过滤后的数据有多少行和多少列。
  2. 使用 QSortFilterProxyModel 的 data 方法获取每个单元格的数据。您可以使用 QModelIndex 来指定要获取数据的单元格。
  3. 将获取到的数据存储到另一个数据结构中,例如列表或字典。
  4. 您可以使用这些数据来做任何您想要做的事情,例如导出到另一个文件中。

下面是一个代码示例,演示如何获取过滤后的数据:

import sys
from PyQt5 import QtCore, QtGui, QtWidgets

class RecordsTableModel(QAbstractTableModel):

    def __init__(self, records, parent=None):
        QAbstractTableModel.__init__(self, parent)
        self.__records = records

    def rowCount(self, parent):
        return len(self.__records)

    def columnCount(self, parent):
        return len(self.__records[0])

    def flags(self, index):
        return Qt.ItemIsEnabled | Qt.ItemIsSelectable

    def data(self, index, role):
        if role == Qt.DisplayRole:
            row = index.row()
            column = index.column()
            value = self.__records[row][column]

            return value

    def headerData(self, section, orientation, role):
        if role == Qt.DisplayRole:
            if orientation == Qt.Horizontal:
                return self.__records[0]._fields[section]


class AndroidDialog(QtWidgets.QDialog):

    def __init__(self, parent=None):
        super(AndroidDialog, self).__init__(parent)

        self.proxyModelContact = QSortFilterProxyModel(self)
        self.proxyModelContact.setSourceModel(RecordsTableModel(self.contacts))
        self.proxyModelContact.setFilterKeyColumn(-1)
        self.proxyModelContact.setFilterCaseSensitivity(Qt.CaseInsensitive)
        self.contactsTableView.setModel(self.proxyModelContact)

        self.contactsExportToolButton.clicked.connect(self.printData)

    def printData(self):
        rowCount = self.proxyModelContact.rowCount()
        columnCount = self.proxyModelContact.columnCount()

        data = []
        for row in range(rowCount):
            row_data = []
            for column in range(columnCount):
                index = self.proxyModelContact.index(row, column)
                value = self.proxyModelContact.data(index)
                row_data.append(value)
            data.append(row_data)

        print(data)


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    dialog = AndroidDialog()
    dialog.show()
    sys.exit(app.exec_())
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.

在上面的代码中,我们首先创建了一个 QSortFilterProxyModel 对象 proxyModelContact,并将它设置为 contactsTableView 的模型。然后,我们连接 contactsExportToolButton 的 clicked 信号到 printData 函数。在 printData 函数中,我们使用 rowCount 和 columnCount 方法来获取过滤后的数据的行数和列数。然后,我们使用 data 方法来获取每个单元格的数据,并将这些数据存储到一个列表中。最后,我们将这个列表打印出来。

我们可以在您的代码中使用类似的方法来获取过滤后的数据。

根据具体需求,可以调整和扩展这些示例,以处理更复杂的数据结构和过滤条件。