2012-02-07 14 views
0

基本的には、タブ区切りのtxtファイルを各書籍(タイトル、著者、出版社など)の一覧を含むリストに変換して、何かを検索する方法を考え出しましたしかし、どのようにして部分的に一致するものも検索して返すようにすることができます。リストのリストを検索する - Python

import csv 
import itertools 

list_of_books = list(csv.reader(open('bestsellers.txt','rb'), delimiter='\t')) 

search = 'Tom Clancy' 
for sublist in list_of_books: 
    if sublist[1] == search: 
     print sublist 

EG。だから、 'Tom Clancy'を検索する代わりに、誰かが "clancy"に入り、Tom Clancyのすべての小説を入手することができます。

ありがとうございました。

答えて

1

は、私は、これはあなたが探しているもの実現思う:

search = 'Tom Clancy' 
for sublist in list_of_books: 
    if search in sublist[1]: 
     print sublist 

UPDATE:

if search.lower() in sublist[1].lower(): 
:私はあなたがこのように、あまりにも小文字に両方の文字列を変換したいと思います

+0

ああ、はい。ありがとう。目の別のセットは常に役立ちます! – sharkman

+0

ええ、私はそれを知っていた! :) – sharkman

0

これは、ちょうどの部分がであることを意味しています。

最初の定義:searchという用語は正確に一致する必要がありますが、文字列内のどの位置でも一致します。これはおそらくほとんどあなたが意味するものです。この場合、サブリストにはの検索語が含まれているかどうかを実際に確認する必要があります。このためには、Pythonのin演算子を使用します:ので、平等と含まれているとの違いの

if search in sublist[1]: 
    print sublist 

を、これは少しと非常に遅いの間になります。私はそれがあなたにとって重要だとは思わない。

第2の定義:最初と同じですが、大文字と小文字は関係ありません。この場合、Pythons lower(またはupper)の文字列メソッドを使用して、大文字と小文字をすべて同じにするだけで、大文字と小文字を無視して、大文字小文字を正規化します。

search = 'Tom Clancy' 
search_lower = search.lower() # move the search lowering 
for sublist in list_of_books: 
    # since strings are immutable, sublist[1].lower() creates a new lower-cased 
    # string to be compared against search_lower. sublist[1] doesn't get modified 
    if search_lower in sublist[1].lower(): 
     print sublist 

これはおそらくあなたが望むものです。

"ファジーマッチング"という3つ目の定義があります。ファジーマッチを受け入れる場合、clincyClancyと一致する可能性があります。くそ、検索があいまいであれば、tomClancyと一致します。それはワームの全体的なものです。幸運にも、this Stack Overflow questionには、それを手助けできるライブラリがたくさんあります。

関連する問題