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

使用Python替换CSV文件中三重双引号为单个双引号的实现问题求助

使用Python替换CSV文件中三重双引号为单个双引号的实现问题求助

老哥,我太懂你这种明明逻辑没问题但代码就是不生效的憋屈了!你遇到的问题其实不是三重引号匹配的锅,是fileinput的使用方式和Python字符串的特性没搞对,我给你拆解下,再给你修正后的解决方法。

首先得说你现有代码的两个核心问题:

  1. 字符串replace是“无副作用”的:Python里字符串是不可变的,line.replace('"""', '"')只会返回一个新的处理后的字符串,不会修改原来的line变量,你之前既没把结果存下来,也没输出,等于白做了。
  2. fileinput的inplace模式需要主动输出内容:用inplace=True的时候,Python会把原文件重定向到一个临时文件,你必须把处理后的内容print出来,这些打印的内容会写到临时文件里,最后临时文件会替换原文件。如果什么都不输出,原文件自然就被清空了。

还有你担心的三重引号匹配问题,其实'"""'完全可以匹配到三重双引号,之前没生效全是上面两个问题导致的。

给你修正后的fileinput版本代码,直接可用:

import fileinput

input_file = "你的目标文件路径.txt"
with fileinput.FileInput(input_file, inplace=True) as f:
    # 如果你确实需要跳过第一行,就保留next(f);不需要的话直接删掉这行
    next(f)
    for line in f:
        # 把replace的结果存到变量里,然后打印
        processed_line = line.replace('"""', '"')
        # end=''是为了避免额外多打一个换行符——因为从文件里读的line本身已经自带换行符了
        print(processed_line, end='')

如果你觉得fileinput的inplace模式太“黑盒”,怕不小心搞坏原文件,也可以用更直观的常规文件读写方式,适合调试:

input_file = "你的源文件路径.txt"
output_file = "处理后的临时文件.txt"

# 打开源文件读,目标文件写
with open(input_file, 'r', encoding='utf-8') as infile, open(output_file, 'w', encoding='utf-8') as outfile:
    # 跳过第一行(不需要就删掉)
    next(infile)
    for line in infile:
        processed_line = line.replace('"""', '"')
        outfile.write(processed_line)

# 如果你确认处理结果没问题,想要直接替换原文件,可以加下面两行(记得先import os)
# import os
# os.replace(output_file, input_file)

用这个常规方式的好处是,你可以先打开output_file看看处理后的内容对不对,没问题再替换原文件,不会像inplace模式那样一不小心就把原文件弄空。

测试一下的话,原行"""QA12345""","""Some Other Text"""经过处理后,就会变成你想要的"QA12345","Some Other Text",完全符合需求。

备注:内容来源于stack exchange,提问作者ResourceReaper

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 09:05:33