在大字符串列表中查找小字符串列表(Python)

在大字符串列表中查找小字符串列表(Python),python,search,csv,Python,Search,Csv,嗨,我是Python新手,所以这可能是一个简单的问题,但我已经在Google上搜索了很多次,似乎找不到克服它的方法。 基本上我有一个字符串列表,取自CSV文件。我还有一个文本文件中的字符串列表。我的工作是查看文本文件中的单词是否在CSV文件中 假设这是CSV文件的外观(由以下部分组成): 假设文本文件如下所示: 浪漫 2003年 我想做的是,创建一个函数,返回一本书的名字,里面有单词“浪漫”和“2003”。所以在这种情况下,它应该返回“私人系列”和“艺妓”,而不是“知更鸟”。但我的问题是,它似乎

嗨,我是Python新手,所以这可能是一个简单的问题,但我已经在Google上搜索了很多次,似乎找不到克服它的方法。 基本上我有一个字符串列表,取自CSV文件。我还有一个文本文件中的字符串列表。我的工作是查看文本文件中的单词是否在CSV文件中

假设这是CSV文件的外观(由以下部分组成):

假设文本文件如下所示: 浪漫 2003年

我想做的是,创建一个函数,返回一本书的名字,里面有单词“浪漫”和“2003”。所以在这种情况下,它应该返回“私人系列”和“艺妓”,而不是“知更鸟”。但我的问题是,它似乎并没有归还它们。然而,当我将输入更改为“浪漫”时,它会返回所有三本书中都包含浪漫的内容。我想这是因为“浪漫2003”不在一起,因为如果我把输入改为“玛丽门”,那么“鸡皮疙瘩”和“艺妓”都会出现。那么我怎样才能克服这个问题呢

另外,如何使函数不区分大小写

任何帮助都将不胜感激:)

我试图将逻辑拆分为小的、可重用的函数

首先,我们有
read\u input
,它接受一个文件名,并将CSV文件的行作为
dicts
的一个iterable返回

search\u过滤器
过滤具有给定术语的结果流。为了进行比较,搜索词和行值都更改为小写,以实现独立于大小写的匹配

query
函数获取一个查询字符串,将其拆分为搜索词,然后根据这些词生成一个过滤器链,并返回最终的、经过过滤的iterable

>>> src = read_input("input.csv") >>> q = query(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'}
嗨,非常感谢你的帮助,但是我有一些问题。一个是,我需要能够从存储在外的文本文件(input.txt)中获取查询“Roman2003”&当我尝试运行您的解决方案时,出现了:第10行,如果有的话(v.lower()中的术语表示s.values()中的v):AttributeError:'NoneType'对象没有属性'lower',实际上没关系,通过查看你的代码,我得到了我的原始代码。所以非常感谢你,没有你的帮助是不可能做到的,非常感谢:)
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
>>> src = read_input("input.csv") >>> q = query(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'}
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