我正在尝试为学校项目制作一个地址簿,但是当查询部分值时,我无法理解搜索值。
以下是我被困的代码块:
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
答案 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_column
是name
列的编号字段在您的CSV文件中。)