【问题标题】:Searching large CSV with .txt file keywords使用 .txt 文件关键字搜索大型 CSV
【发布时间】:2019-12-10 19:17:02
【问题描述】:

正在寻找以下问题的解决方案:

我有 1 个大型 CSV (data.csv) 文件,其中包含:

first name | last name | phone number | email address

然后我有一个包含名称列表的 .txt 文件。文本文件将被逐行格式化

smith
johnson
jones

我希望搜索大型 CSV,并将包含该关键字的每一整行导出到另一个 CSV (Results.csv)

例子:

在 Data.csv 中搜索“Smith, Johnson, Jones”(来自 keyword.txt)会将整行(如果姓氏匹配)导出到 results.csv。

John Smith, 1234 Main St, 1800-800-8800, etc
John Johnson, 4321 South St...

在这里搜索,我将我正在寻找的部分内容放在一起,但仍需要弄清楚如何根据关键字匹配整行,然后将其导出为 CSV

import re

searchlist = []
with open("keyword.txt") as g:
    for line in g:
        searchlist.append(line.strip())

pattern = re.compile("|".join(searchlist))
with open("data.csv") as f:
    for line in f:

【问题讨论】:

  • file.txt里面的数据怎么样?
  • CSV 中的字段是否包含多行文本?
  • 您的示例数据与您的描述不符 - 名字和姓氏是逗号分隔的,还是您需要对全名进行文本搜索?你有一个强大的开始!在您的for 中,您应该测试该行,然后将其存储在数据结构中,直到您完成整个过程。
  • @GiovaniSalazar 文本文件将是每行一个单词。
  • @aventurin 每个单元格都是单行文本。

标签: python csv


【解决方案1】:

如果您对正则表达式没有特定需求,您可以这样做:

searchlist = []
with open("keyword.txt") as g:
    for line in g:
        searchlist.append(line.strip())

with open("data.csv") as f:
    for line in f:
        if any(s in line for s in searchlist):
            print(line, end='')

不区分大小写的查找:

        if any(s.upper() in line.upper() for s in searchlist):
            print(line, end='')

您可以通过在开始填充搜索列表时使用 upper() 关键字填充搜索列表来节省一些额外的 CPU 周期。

【讨论】:

  • 好吧,酷。这似乎表明了结果。我现在如何将找到的行导出到 CSV?
猜你喜欢
  • 1970-01-01
  • 2015-07-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-11
  • 1970-01-01
  • 1970-01-01
  • 2011-03-22
  • 1970-01-01
相关资源
最近更新 更多