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

Python读取含引号-逗号组合字符串的CSV文件报错如何解决?

解决CSV含错误引号导致pandas解析失败的问题

你的CSV文件第三行存在格式错误:"Unfortunately",I get an error" 里的"Unfortunately"多了一个闭合引号,导致pandas的CSV解析器误判字段分隔,抛出ParserError: Error tokenizing data. C error: Expected 3 fields in line 4, saw 4。下面是几种可行的解决办法:

  • 方法一:预处理CSV文件,批量修复错误引号
    如果文件数量不多,可以用脚本批量修正文本内的错误单个引号(保留字段首尾的正常引号):

    import re
    import pandas as pd
    
    def fix_csv(input_path, output_path):
        with open(input_path, 'r', encoding='utf-8') as f_in, open(output_path, 'w', encoding='utf-8') as f_out:
            for line in f_in:
                # 匹配并删除字段内部的单个引号(排除行首、逗号前、行尾的正常引号)
                fixed_line = re.sub(r'(?<!^|,)"(?!,|$)', '', line)
                f_out.write(fixed_line)
    
    # 先修复原文件
    fix_csv('your_file.csv', 'fixed_file.csv')
    # 读取修复后的文件
    df = pd.read_csv('fixed_file.csv', sep=',', quotechar='"')
    

    修复后再用常规方式读取,就能得到你想要的结果。

  • 方法二:用Python引擎读取并现场处理错误
    改用pandas的Python解析引擎(默认C引擎对格式错误容忍度低),配合自定义逻辑处理拆分的字段:

    import pandas as pd
    import csv
    
    # 用Python引擎读取,关闭自动引号解析
    df = pd.read_csv('your_file.csv', sep=',', engine='python', quoting=csv.QUOTE_NONE)
    
    # 处理字段数超标的行(比如第三行被拆成4列)
    if len(df.columns) > 3:
        # 合并拆分的Text字段,清理引号
        df['Text'] = df.iloc[:,1] + ', ' + df.iloc[:,2]
        df = df.drop(df.columns[2], axis=1)
        df.columns = ['ID', 'Text', 'Value']
    
    # 清理所有Text字段的引号
    df['Text'] = df['Text'].str.replace('"', '', regex=False)
    

    这个方法不用修改原文件,直接在读取时修正格式问题。

  • 方法三:用csv模块手动解析每行
    用Python标准库的csv模块自定义解析逻辑,灵活性更高:

    import csv
    import pandas as pd
    
    data = []
    with open('your_file.csv', 'r', encoding='utf-8') as f:
        reader = csv.reader(f)
        header = next(reader)
        for row in reader:
            if len(row) > 3:
                # 合并被拆分的Text部分,去掉多余引号
                text = ', '.join(row[1:-1]).replace('"', '')
                new_row = [row[0], text, row[-1]]
                data.append(new_row)
            else:
                # 正常行清理引号
                row[1] = row[1].replace('"', '')
                data.append(row)
    
    df = pd.DataFrame(data, columns=header)
    

    这种方式可以应对更复杂的格式错误,根据实际情况调整合并规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 18:05:19