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

