使用Python替换CSV文件中三重双引号为单个双引号的实现问题求助
使用Python替换CSV文件中三重双引号为单个双引号的实现问题求助
老哥,我太懂你这种明明逻辑没问题但代码就是不生效的憋屈了!你遇到的问题其实不是三重引号匹配的锅,是fileinput的使用方式和Python字符串的特性没搞对,我给你拆解下,再给你修正后的解决方法。
首先得说你现有代码的两个核心问题:
- 字符串replace是“无副作用”的:Python里字符串是不可变的,
line.replace('"""', '"')只会返回一个新的处理后的字符串,不会修改原来的line变量,你之前既没把结果存下来,也没输出,等于白做了。 - 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
相关产品推荐
相关产品推荐

