在大字符串列表中找到一小串字符串Python

问题描述

| 嗨,我是Python的新手,所以这可能是一个简单的问题,但是我已经在Google上搜索了很多次了,我似乎找不到解决它的方法。 基本上,我有一个字符串列表,取自CSV文件。我在文本文件中还有另一个字符串列表。我的工作是查看文本文件中的单词是否在CSV文件中。 假设这是CSV文件的样子(已组成):
  name,author,genre,year
  Private Series,Kate Brian,Romance,2003
  Mockingbird,George Orwell,1956
  Goosebumps,Mary Door,Horror,1990
  Geisha,2003
假设文本文件如下所示:        浪漫        2003年 我要尝试做的是创建一个函数,该函数返回一本书名称,其中包含单词“ Romance”和“ 2003”。因此,在这种情况下,它应返回\“ Private Series \”和\“ Geisha \”,但不返回\“ Mockingbird \”。但是我的问题是,它似乎没有退还给他们。但是,当我将输入更改为\“ Romance \”时,它将返回所有三本书都带有浪漫的内容。我认为这是因为“ Romance 2003”并不在一起,因为如果我将输入更改为“ Mary Door”,那么“ Goosebumps”和“ Geisha”都会显示出来。那么我该如何克服呢? 另外,如何使我的函数不区分大小写? 任何帮助将非常感激 :)     

解决方法

import csv

def read_input(filename):
    f = open(filename)
    return csv.DictReader(f,delimiter = \',\')

def search_filter(src,term):
    term = term.lower()
    for s in src:
        if term in map(str.lower,s.values()):
            yield s

def query(src,terms):
    terms = terms.split()
    for t in terms:
        src = search_filter(src,t)
    return src

def print_query(q):    
    for row in q:
        print row
我试图将逻辑拆分成小的可重用的函数。 首先,我们有
read_input
,它使用文件名并以
dicts
的可迭代方式返回CSV文件的行。
search_filter
过滤具有给定条件的结果流。搜索词和行值均更改为小写以进行比较,以实现大小写无关的匹配。
query
函数采用查询字符串,将其分成搜索词,然后根据这些词创建一连串的过滤器,并返回最终的,过滤后的可迭代。 >>> src = read_input(\“ input.csv \”) >>> q =查询(src,\“ Romance 2003 \”) >>> print_query(q) {\'genre \':\'Romance \',\'year \':\'2003 \',\'name \':\'Private Series \',\'author \':\'Kate Brian \' } {\'genre \':\'Romance \',\'year \':\'2003 \',\'name \':\'Geisha \',\'author \':\'Mary Door \'} 请注意,上述解决方案仅返回完全匹配项。如果你想返回带有搜索查询\“ Roman 2003 \”的匹配项,则可以使用此替代版本的
search_filter
def search_filter(src,term):
    term = term.lower()
    for s in src:
        if any(term in v.lower() for v in s.values()):
            yield s