如何在两个大的csv文件(python)中查找字符串中的子字符串

2024-04-20 11:15:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个大的csv文件。另一个关键字在csv文件的主字段中有一个。我在寻找这些关键字在产品名称在第一个CSV文件。目前我的代码是这样的:

class Keyword:
    # keyword class for adding match keywords
        def __init__(self):
          self.data={}
        def add(self, keyword, count):
          if keyword in self.data.keys():
            self.data[keyword]+=count
          else:
            self.data[keyword]=count
        def get_match(self):
           temp = []
           for key, value in self.data.iteritems():
              temp.append(key)
              temp.append(value)
           return temp

for i, product_row in product_df.iterrows():
    product_title = product_row['title'].lower().replace(',','')
    k = Keyword()
    for j, keyword_row in keyword_df.iterrows():
        if keyword_row['keyword'] in product_title:
           k.add(keyword_row['keyword'], keyword_row['count'])

    match_items = k.get_match()
    if len(match_items)>0:
        temp = product_row.tolist()
        temp = [str(x).replace(',','') for x in temp]
        temp.extend(match_items)
        print>>sys.stdout, str(temp).strip('[]').replace("'",'')
    else:
        pass

这段代码非常慢,我有许多这样的csv文件,应该得到相互比较。你知道比较这些文件更有效的方法吗?在


Tags: 文件csvinselffordataiftitle
2条回答

读取整个关键字文件,将关键字存储在列表中。之后,阅读您的产品字段,并检查是否有任何关键字在该字段中,如果他们是,然后打印他们。在

with open("keywords.txt", "r") as f:
    keywords = f.read().splitlines()

with open("products.txt") as f:
    for product_name in f:
        if any(keyword in product_name for keyword in keywords):
            print product_name

如果你的关键字真的是单字,而不是多字表达式,我的第一个建议是将产品标题转换成一组,以便更快地查找:

product_title = set(product_row['title'].lower().replace(',','').split())

相关问题 更多 >