【问题标题】:Python Search CSV with Regex and export result to different CSVPython 使用正则表达式搜索 CSV 并将结果导出到不同的 CSV
【发布时间】:2026-01-08 14:25:24
【问题描述】:

我正在使用加载了正则表达式和 csv 模块的 Python3,并尝试创建一个脚本以使用正则表达式从 csv 中提取字符串,然后将结果导出到不同的 csv。我的想法是我有一个有人给我的 csv,它有一个单列,并且由于某种原因有一个单元格,其中包含很多信息。包括引号、换行符和一堆其他垃圾。我只需要每个单元格的一小部分。

我的脚本能够打印结果,但由于某种原因,以下脚本在尝试写入 csv 时返回错误 "AttributeError: 're.Match' object has no attribute 'write'"

我想从 csv 的每个单元格中提取一个字符串,然后将其导出到另一个 csv。

import csv
import re

with open('Failed.csv',mode='r') as csv_file, open('result.csv', mode='wb') as csv_result:
     csv_reader = csv.reader(csv_file)
     writer=csv.writer(csv_result, delimiter=',')
     for row in csv_reader:
            pattern = 'Computer Configuration\\.*\n*.*'
            currentrow = row[0]
            found = re.search(pattern, currentrow) 
            if found:
                print(found)
                writer.writerow(found)

【问题讨论】:

    标签: python regex python-3.x csv


    【解决方案1】:

    方法re.search 返回一个您不能直接使用的Match 对象。如果你想从行中检索一个值,你可以使用一个组

    value = "foo123"
    pattern = "foo(.*)"
    match = re.search(pattern, value)
    
    print(match, type(match))  # <re.Match object; span=(0, 3), match='foo'> <class 're.Match'>
    print(match.groups())  # ('123',)
    print(match.group(1))  # 123
    

    【讨论】:

    • 奇怪的部分是当我做 print(match.groups()) 它只是返回 ()
    • @Zygodactyl 您需要在模式中使用括号来创建匹配组,您可以阅读有关组的信息,您会很容易找到详细信息;)
    • 是的,我错过了愚蠢的模式中的括号。
    • 还必须将第二个文件的打开从 wb 更改为 w