【问题标题】:Search for a word/phrase in csv file in Python在 Python 中的 csv 文件中搜索单词/短语
【发布时间】:2020-03-22 01:49:52
【问题描述】:

我有一个 csv 格式的推文数据库,看起来像这样 - screen of csv database - 我需要使用 Python 代码对这个文件执行以下任务:

在推文中搜索某些词/短语(推文的文本在 C 列中),如果推文有我要查找的这个词/短语,我需要将这条推文的整行写入一个新的.csv 文件

并且(如果可能)从旧的 csv 文件中删除这条推文,或者在没有它的情况下创建一条新推文。

我希望我说清楚了。

【问题讨论】:

标签: python csv twitter


【解决方案1】:

您可以使用 csv 库来读取文件并一次搜索每一行。

import csv

with open('out.csv', 'w', newline='') as output_file:
    writer = csv.writer(output_file, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL)

    with open('test.csv') as csv_file:
        csv_read = csv.reader(csv_file, delimiter=',')
        for row in csv_read:
            if "a" in row[2]:
                writer.writerow(row)

这里是 python 文档的链接:https://docs.python.org/3/library/csv.html。希望这会有所帮助。

编辑:如果您想要多个搜索词,请在列表推导中使用 any()。

import csv

with open('out.csv', 'w', newline='') as output_file:
    writer = csv.writer(output_file, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL)

    with open('input.csv') as csv_file:
        csv_read = csv.reader(csv_file, delimiter=',')
        for row in csv_read:
            search_terms = ["term1", "term2"]

            if any([term in row[2] for term in search_terms]):
                writer.writerow(row)

【讨论】:

  • 实际上,这只会在输出文件中写入一行,仅此而已。有一个for循环,所以应该没问题,但我不知道为什么会这样。我最后使用了writerow。可能是这个原因?
  • @Tomito 此更改对我有用。我所做的只是在这里使用 csv 的 writerow。
  • 有效,谢谢!我刚刚删除了 delimiter 和 quotechar 的东西,因为它们的输出文件太乱了。
  • 另一个小问题,如果可以的话……有没有办法搜索多个单词? if ("a", "b") in row[2]: ... 真的不行。
  • @Tomito 你可以使用 any() 来做到这一点。我做了一个编辑。 docs.python.org/3/library/functions.html#any
猜你喜欢
  • 1970-01-01
  • 2015-08-28
  • 2013-09-17
  • 2021-09-13
  • 1970-01-01
  • 1970-01-01
  • 2020-05-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多