1

学校のプロジェクト用にアドレス帳を作成しようとしていますが、値の一部がクエリされたときに、値を検索することに頭を悩ませることができません。

これが私が立ち往生しているコードのブロックです:

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」を検索する必要があります。「じょ」とか「じょん」とか「hn」とかで検索しても出てこない…

さらに詳しい情報が必要な場合は、お問い合わせください:P

4

1 に答える 1

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の列の番号はnameCSV ファイルにあります)。

于 2012-11-09T20:21:47.407 に答える