基本上我已经将制表符分隔的txt文件转换为包含每本书(标题,作者,出版商等)的一堆列表的列表,并且我已经找到了如何使用索引搜索某些内容,但是我如何制作所以它搜索并返回甚至部分匹配的任何内容。
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。因此,不必搜索“汤姆克兰西”,有人可以进入“克莱恩”并仍然得到汤姆克兰西的所有小说。
感谢。
答案 0 :(得分:1)
我认为这可以实现您的目标:
search = 'Tom Clancy'
for sublist in list_of_books:
if search in sublist[1]:
print sublist
更新:
我认为您也希望将两个字符串转换为小写字母,如下所示:
if search.lower() in sublist[1].lower():
答案 1 :(得分:0)
这取决于部分的确切含义。
第一个定义:search
术语应该完全匹配,但它可以在字符串中的任何位置匹配。这可能几乎就是你的意思。在这种情况下,您确实要检查子列表是否包含搜索词。为此,您希望使用Python的in
运算符:
if search in sublist[1]:
print sublist
由于相等和包含之间的差异,这将介于略微和非常慢之间。我怀疑这对你很重要。
第二个定义:与第一个相同,但情况无关紧要。在这种情况下,你想要规范化大小写,基本上只是通过使用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
这可能就是你想要的。
还有第三个定义,即“模糊匹配”。如果您接受模糊匹配,clincy
可能会匹配Clancy
。哎呀,如果搜索模糊不清tom
可以匹配Clancy
。这是一个完整的'蠕动的蠕虫。幸运的是,this Stack Overflow question有一大堆可以帮助它的库。