CSV 查找几乎相同的值并使它们相同并过滤值

CSV Find Nearly the same value and make them identical and filter the values

社区!

故事:我正在尝试将包含大量产品的 CSV 文件上传到我的 e-commerce 商店。但是有很多非常相似的产品,但每个列都略有不同。幸运的是,我使用的插件可以处理这个问题,但它需要对整个产品系列使用相同的标题或对其 parent 产品的一些引用。遗憾的是没有参考文献。

现在我想知道如何在 CSV 文件中找到几乎相同的值(在 SQL 中有一个叫做“%LIKE%”的东西)来适当地构建 table .我几乎无法描述我想要实现的目标,但这是我正在寻找的示例。

我基本想改造这个table:

+---------------+---------------+---------------+---------------+
|      ID       |     Title     |      EAN      |      ...      |
+---------------+---------------+---------------+---------------+
|      1        | AquaMat 3.6ft |   1234567890  |      ...      |
+---------------+---------------+---------------+---------------+
|      2        | AquaMat 3.8ft |   1234567891  |      ...      |
+---------------+---------------+---------------+---------------+
|      3        |  AquaMat 4ft  |   1234567892  |      ...      |
+---------------+---------------+---------------+---------------+

变成这样:

+---------------+---------------+---------------+---------------+
|      ID       |     Title     |      EAN      |      ...      |
+---------------+---------------+---------------+---------------+
|      1        |    AquaMat    |   1234567890  |      ...      |
+---------------+---------------+---------------+---------------+
|      2        |    AquaMat    |   1234567891  |      ...      |
+---------------+---------------+---------------+---------------+
|      3        |    AquaMat    |   1234567892  |      ...      |
+---------------+---------------+---------------+---------------+

多余的数据可以抓取我可以用Excel抓取吗?用宏?用 Python?

感谢您花时间阅读本文。

如果您有任何问题,请随时提问。

编辑:

标题列包含名称完全不同的产品,甚至可能包含更多空格。有些产品可能有 1 个属性,但其他产品最多有 3 个属性。但这可以手动排序。

与您在 table 中看到的几乎相同。标题基本相同但不完全相同。我想从它们中删除属性。此外,没有其他列包含更多详细信息,只有数字和我试图删除标题的属性!!!

我想我们需要更多关于您想要实现的目标的信息。它只是您要删除的“Aquamat”(例如)之后的额外文本吗?如果是这样,您可以简单地遍历 csv 文件并删除“标题”列中“Aquamat”之后的所有内容。

不过,根据您的描述,我认为可能不止于此。

也许起点是让我们知道您所说的“几乎相同”是什么意思。您想要 LIKE 的 SQL 是什么意思,还是其他意思?

编辑:

您可以查看 Python 的正则表达式:Here。如果您的“几乎相同”可以按照文档中的描述转换为正则表达式,那么您可以使用 python 循环遍历 csv 文件和基于正则表达式的 search/replace 术语。

“标题”栏中的所有内容是否“几乎相同”,或者它们是否也存在于其他栏中?

这是一个使用 Python 和 .split() 的想法:

import csv

with open('testfile.csv', 'r', encoding="utf-8-sig") as inputfile:

 csv_reader = csv.reader(inputfile, delimiter=',')
   with open('outputfile.csv', 'w', newline='') as outputfile:
      w = csv.writer(outputfile)
      header=['ID','Title','EAN','Product','Attr1','Attr2','Attr3']
      w.writerow(header)
      for row in csv_reader:
          if row[0]=='ID':
              header_row=True
              pass
          else:
              header_row=False
              list=row[1].split()
              for item in list:
                  # if you want, you can add some other conditions on the attribute (item) in here
                  row.append(item)
              if not header_row:
                  print('row: {}'.format(row))
                  w.writerow(row)