You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中给CSV每行应用正则函数无输出,排查问题原因

问题排查与解决方案

我来帮你找出问题所在——你的正则函数本身是有效的,但代码没有对处理后的结果执行任何输出或保存操作,所以你看不到任何效果。咱们一步步修正:

核心问题分析

你调用myFunction(l)后,只是得到了处理后的字符串,但既没有把它打印到控制台,也没有写入到文件中,相当于“做了处理但没留痕迹”。另外,你用csv.reader读取行后再用,拼接回原始字符串的思路是可行的,但需要捕获函数的返回值并使用它。

修正后的代码

方案1:打印处理后的结果到控制台

import re
import csv

def myFunction(text):
    return re.sub('(?<!\s[\dA-Z]),(?!\s+\d,?)', '', text)

# 读取CSV并打印处理后的每一行
with open('temp1.csv', 'r') as csvfile:
    spamreader = csv.reader(csvfile, delimiter=',')
    for row in spamreader:
        # 将csv.reader拆分后的列表重新拼接为原始行字符串
        original_line = ','.join(row)
        # 应用正则替换
        processed_line = myFunction(original_line)
        # 打印结果
        print(processed_line)

方案2:将处理后的结果写入新CSV文件

如果需要保存处理后的几百行数据,更推荐写入新文件:

import re
import csv

def myFunction(text):
    return re.sub('(?<!\s[\dA-Z]),(?!\s+\d,?)', '', text)

# 读取原文件并写入处理后的内容到新文件
with open('temp1.csv', 'r') as infile, open('processed_temp1.csv', 'w', newline='') as outfile:
    spamreader = csv.reader(infile, delimiter=',')
    for row in spamreader:
        original_line = ','.join(row)
        processed_line = myFunction(original_line)
        # 写入处理后的行(添加换行符保证每行独立)
        outfile.write(processed_line + '\n')

额外注意事项

如果你的CSV文件中存在带引号的字段(比如字段本身包含逗号,如"Doe, John"),csv.reader会自动识别并保留字段完整性,但用,拼接回字符串时可能会丢失引号。这种情况下,你可以考虑直接按行读取文件(不用csv.reader),这样能完全保留原始行的格式:

import re

def myFunction(text):
    return re.sub('(?<!\s[\dA-Z]),(?!\s+\d,?)', '', text)

# 直接按行读取文件,避免破坏带引号的字段
with open('temp1.csv', 'r') as infile, open('processed_temp1.csv', 'w') as outfile:
    for line in infile:
        # 去除行尾的换行符,处理后再加回来
        processed_line = myFunction(line.strip()) + '\n'
        outfile.write(processed_line)

内容的提问来源于stack exchange,提问作者Rohit Girdhar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:29:48