【问题标题】:Python search for value in string using wildcardsPython使用通配符在字符串中搜索值
【发布时间】:2012-11-09 19:37:13
【问题描述】:

我正在尝试为学校项目制作通讯录,但当查询部分值时,我无法全神贯注地搜索值。

这是我卡住的代码块:

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

【问题讨论】:

    标签: python search python-2.7


    【解决方案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 文件中的列号)。

    【讨论】:

    • 非常感谢!我想,这完全有道理。感谢您提供一种使用特定列的方法!先生,为您点赞。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-24
    相关资源
    最近更新 更多