我正在尝试为学校项目制作地址簿,但是当查询部分值时,我无法全力以赴寻找值。
这是我所坚持的代码块:
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_column
是name
字段的列号位于CSV文件中) )。