Python使用通配符搜索字符串中的值

时间:2012-11-09 19:37:14

标签: python search python-2.7

我正在尝试为学校项目制作一个地址簿,但是当查询部分值时,我无法理解搜索值。

以下是我被困的代码块:

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”。如果我搜索“Joh”或“john”或“hn”等等就不会出现......

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

1 个答案:

答案 0 :(得分:1)

我认为您想要做的是在行的字段中搜索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文件中。)