使用pandas read_csv读取含反斜杠的CSV文件时出错
解决CSV含单/双反斜杠时pandas read_csv报错的问题
问题根源
你的CSV里混合了单反斜杠\和双反斜杠\\,而pandas.read_csv用unicode_escape编码读取时,会把单反斜杠当成转义符解析。如果单反斜杠后面跟着的不是\n、\t这类合法转义序列(比如你的例子里的\S、\P),就会触发Unicode解码错误——因为它试图解析不存在的转义规则,自然读不进去。
可行解决方案
方案1:先手动读取文件并处理反斜杠,再交给pandas
直接绕过read_csv的自动转义解析,先把文件内容读出来,统一处理反斜杠(比如换成斜杠,或者转成双反斜杠),再用StringIO传给pandas:
import pandas as pd from io import StringIO # 读取文件内容,把所有反斜杠替换成斜杠(若要保留反斜杠逻辑可换成:replace('\\', '\\\\')) with open(r'C:\testfile.csv', 'r', encoding='utf-8') as f: content = f.read().replace('\\', '/') # 用StringIO包装处理后的内容,让pandas读取 df = pd.read_csv(StringIO(content)) print(df.head())
这种方法最直接,适合大多数场景,不用纠结pandas的转义规则。
方案2:用csv模块先读取,再转成DataFrame
Python内置的csv模块对转义的控制更灵活,可以关闭反斜杠的转义功能,先正确读取所有字段,再转成DataFrame:
import csv import pandas as pd rows = [] with open(r'C:\testfile.csv', 'r', encoding='utf-8') as f: # 根据你的CSV实际引号情况设置quoting,比如字段都用双引号括起来就用csv.QUOTE_ALL reader = csv.reader(f, escapechar=None, quoting=csv.QUOTE_ALL) header = next(reader) # 遍历每一行,按需处理字段里的反斜杠 for row in reader: processed_row = [col.replace('\\', '\\\\') if isinstance(col, str) else col for col in row] rows.append(processed_row) df = pd.DataFrame(rows, columns=header) print(df.head())
escapechar=None会告诉csv模块不要把反斜杠当成转义符,这样就能完整读取带单反斜杠的字段,避免解析错误。
方案3:指定engine='python'并调整转义参数
如果你的CSV格式规范,可以试试用Python引擎读取,并禁用转义解析:
import pandas as pd import csv df = pd.read_csv( r'C:\testfile.csv', encoding='utf-8', engine='python', escapechar=None, quoting=csv.QUOTE_ALL # 需根据实际引号情况调整 ) print(df.head())
注意:默认的C引擎不支持escapechar=None,必须切换到Python引擎。
内容的提问来源于stack exchange,提问作者Dravin101
相关产品推荐
相关产品推荐

