1

我正在尝试为学校项目制作通讯录,但是当查询部分值时,我无法集中精力搜索值。

这是我坚持的代码块:

self.ui.tableWidget.setRowCount(0)
with open("data.csv") as file:
    for rowdata in csv.reader(file):
        row = self.ui.tableWidget.rowCount()
        if query in rowdata:
            self.ui.tableWidget.insertRow(row)
            for column, data in enumerate(rowdata):
                item = QtGui.QTableWidgetItem(data)
                self.ui.tableWidget.setItem(row, column, item)

如您所见,我使用 PyQt TableWidget 来显示来自 csv 文件的搜索结果。上面的代码确实有效,但仅在给出完整查询时才显示结果。检查匹配的代码行是:

        if query in rowdata:

例如,如果我想找到一个叫 John 的人,我就必须准确地搜索“John”。如果我搜索“Joh”或“john”或“hn”等,它不会出现......

如果您需要更多信息,请询问:P

4

1 回答 1

1

我认为您想要做的是query在行的字段中搜索,而不是一次搜索整行。

您遇到的问题是string in obj根据类型的不同做不同的事情obj。如果它是一个字符串,它会进行子字符串搜索(如您所愿)。但是,如果它是一个非字符串容器,它会定期进行成员资格检查(这就是它现在只找到完全匹配的原因)。

因此,要修复它,请将您的测试从 更改if query in rowdataif any(query in field for field in rowdata). 如果您只想在特定字段(如联系人姓名)中搜索匹配项,那么它可能会更简单:(if query in rowdata[name_column]该字段name_column的列号name在您的 CSV 文件中)。

于 2012-11-09T20:21:47.407 回答