我正在尝试为学校项目制作地址簿,但是当查询部分值时,我无法全力以赴寻找值。

这是我所坚持的代码块:

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

最佳答案

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

您遇到的问题是string in obj根据obj的类型执行不同的操作。如果是字符串,它将进行子字符串搜索(如您所愿)。但是,如果它是一个非字符串容器,它将进行常规的成员资格检查(这就是为什么现在仅查找完全匹配的原因)。

因此,要解决此问题,请将您的测试从if query in rowdata更改为if any(query in field for field in rowdata)。如果您只想在特定字段(例如联系人的姓名)中搜索匹配项,则它可能更简单:if query in rowdata[name_column](其中name_columnname字段的列号位于CSV文件中) )。

10-06 05:21
查看更多