如何用Pandas read_csv读取含双引号值及带逗号字段的异常CSV文件
使用Pandas读取含未转义双引号的特殊CSV文件
你的问题核心是该CSV不符合标准格式——标准CSV要求值内的双引号必须用两个连续双引号转义(比如"fi""e,ld2"),但你的文件里值内是单个双引号,导致Pandas默认的解析逻辑失效。
直接用read_csv的参数无法解决这种非标准格式,必须先预处理文本,将未转义的双引号转为标准格式,再用Pandas读取。
解决方案代码
import pandas as pd from io import StringIO def fix_unescaped_quotes(line): in_quote = False new_chars = [] for char in line: if char == '"': if in_quote: # 引号内的单个双引号替换为两个,符合CSV转义规则 new_chars.append('""') else: new_chars.append(char) in_quote = True else: new_chars.append(char) # 遇到分隔符且不在引号内时,标记为字段结束 if char == ',' and not in_quote: in_quote = False return ''.join(new_chars).rstrip('\n') # 读取原始文件并预处理 with open('your_file.csv', 'r', encoding='utf-8') as f: processed_lines = [fix_unescaped_quotes(line) for line in f] # 用StringIO将处理后的文本传入read_csv df = pd.read_csv( StringIO('\n'.join(processed_lines)), quotechar='"', escapechar='"' ) # 输出验证 print(df.to_string(index=False, col_space=10))
效果说明
对示例文件第一行"fie,ld1","fi"e,ld2","field3",预处理后会转为标准格式:"fie,ld1","fi""e,ld2","field3"
此时Pandas就能正确识别3个字段,结果完全符合你的期望:
fie,ld1 fi"e,ld2 field3 test testing meow
内容的提问来源于stack exchange,提问作者matixsnow
相关产品推荐
相关产品推荐

