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
相关产品推荐
相关产品推荐

