【问题标题】:Searching for a specific phrase in CSV file using regex in Python在 Python 中使用正则表达式在 CSV 文件中搜索特定短语
【发布时间】:2020-03-29 02:07:21
【问题描述】:

我有一个 csv 推文数据库,我需要在其中搜索特定短语和单词的列表。 例如,我正在搜索“全球变暖”。我不仅想找到“全球变暖”,还想找到“全球变暖”、“全球变暖”、“#globalwarming”、“#Globalwarming”、“#GlobalWarming”等。所以,所有可能的形式。

我怎样才能在我的代码中实现正则表达式来做到这一点?或者也许还有其他解决方案?

with open('filedirectory.csv', 'w', newline='') as output_file:
    writer = csv.writer(output_file)

    with open('filedirectory1.csv', 'w', newline='') as output_file2:
        writer2 = csv.writer(output_file2)

        with open('filedirectory2.csv') as csv_file:
          csv_read = csv.reader(csv_file)

          for row in csv_read:

                search_terms = ["global warming", "GLOBAL WARMING", etc.]

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

                else:
                   writer2.writerow(row) ``


【问题讨论】:

  • 你可以通过强制跳过大写和小写:例如row = row.lower()。那么正则表达式就是这样的:#?global\s*warming
  • 建立一个匹配您提供的所有表格的正则表达式是可能的。看看这个website 它很有帮助。我建议使用不区分大小写的正则表达式,在全球和变暖之间使用可选字符(# 和空格)。

标签: python regex csv


【解决方案1】:

您可以通过非常简单的修改使用自己的代码

...

for row in csv_read:
    row_lower = row.lower()
    search_terms = ["global warming", "globalwarming"]

    if any([term in row_lower for term in search_terms]):
        writer.writerow(row)
    else:
        writer2.writerow(row)

如果您必须使用正则表达式,或者您害怕错过某些行,例如:“...global(多个空格)warming...”,“..global____warming..”,“..global 严重变暖..”

...

global_regex = re.compile(r'global.*?warming', re.IGNORECASE)
for row in csv_read:            

        if any(re.findall(global_regex, row)):
           writer.writerow(row)
        else:
           writer2.writerow(row)

我在循环外编译了正则表达式以获得更好的性能。

Here 你可以看到正则表达式的作用。

【讨论】:

  • 谢谢!才有机会试一试。抱怨“预期的字符串或类似字节的对象”......
  • 哪个代码 sn-p 给出了这个错误?你也可以粘贴确切的错误吗?
猜你喜欢
  • 1970-01-01
  • 2013-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多