2016-12-07 41 views
0

我有兩個大的csv文件。主要有一個字段作爲產品名稱,而在其他csv文件中我有一些關鍵字。我在第一個CSV文件中查找產品名稱中的這些關鍵字。目前,我的代碼是這樣的:如何在兩個大csv文件(python)中找到字符串中的子串

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文件,應該讓相互比較的。你知道比較這些文件更有效的方法嗎?

+0

請修復代碼縮進。 –

+0

您只是在csv文件的產品名稱字段中統計每個關鍵字*出現的次數? – wwii

+0

請向我們展示每個文件的幾行。 – wwii

回答

0

閱讀整個關鍵字文件,存儲關鍵字一個列表。之後,閱讀您的產品字段,並檢查是否有任何關鍵字在現場,如果他們然後打印它們。

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 
+0

非常感謝,它變得更快。 – Moohebat

0

如果您的關鍵字是真正簡單的詞,而不是多字的表達,我的第一個建議是將產品名稱轉換成一組更快的查找:

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

問題是關鍵字可以是bigram,trigram等等。我想知道哪些產品這些關鍵字重複。 – Moohebat

+0

你是否在乎二元,三元等單詞的順序?如果不是,您也可以將關鍵字預先轉換爲集合,然後使用標題詞集合計算集合交集:'if keyword_row ['keyword']&product_title:' – DyZ

+0

是的,它們的順序很重要。 – Moohebat

相關問題