从列表中将字符串匹配到CSV文件Python行

时间:2019-02-01 00:56:30

标签: python-3.x loops csv

我的目标是编写一个遍历CSV文件并实现以下功能的函数:

  • 采用“关键字”(它是字符串列表),并返回说明中具有“关键字”的所有相关代码。

CSV文件格式示例:

“ 2399”,“ 1”,“盗窃自行车”,“自行车盗窃”

例如:

  1. find_that_code(['bicycle'])
  2. find_that_code(['bicycle','scooter'])

输出

  1. [2399]
  2. []

我很难弄清楚如何将与关键字列表中的字符串匹配的IF语句构造到第[3]行之内。

对于这些示例,您会注意到,尽管存在自行车弦乐,但第二个示例却什么也不输出,而踏板车则没有。

我尝试过的事情:

def find_that_code(keywords):
codelist = []
keywords = str(keywords)


with open('codes.csv') as csv_file:
    reader = csv.reader(csv_file, delimiter=',')
    next(reader)  # skip the first row
    for row in reader:
        if row[3] == any([x in keywords for x in keywords]):
            code = row[0]
            return True
        else:
            return False

当前,我有返回True或False的代码以找出问题所在。但是一旦我知道如何将关键字列表中的字符串与CSV的row [3]相匹配,那么我就可以完成其余部分。

感谢您的宝贵时间,我非常感谢您的建议。

1 个答案:

答案 0 :(得分:1)

如果您要查找在描述列中出现任何个给定关键字的所有行:

def find_that_code(keywords):
    codelist = []

    with open('codes.csv') as csv_file:
        reader = csv.reader(csv_file, delimiter=',')
        next(reader)  # skip the first row
        for row in reader:
            if any(k in row[3].lower() for k in keywords):
                codelist.append(row[0])

    return codelist

我试图尽可能减少您的原始帖子。但是请注意,这会根据您要执行的操作而执行得很慢,因为如果您多次调用它,则会从头开始反复读取文件,并对每个您希望匹配的关键字集重新处理它。

如果您希望定期对数据集执行此操作,则最好将数据集转储到Solr或Lucene(或某种基于文本的搜索引擎)中。