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

Python读取AWS S3中列数据末尾含反斜杠的CSV文件时的解析问题

Python读取AWS S3中列数据末尾含反斜杠的CSV文件时的解析问题

嗨,我碰到过类似的CSV解析坑!问题出在你CSV里的Andrew \末尾的反斜杠——CSV解析器默认会把反斜杠当成转义字符,它会认为后面的逗号(字段分隔符)是被转义的,不属于分隔字段的作用,所以才会报错说“没读到预期的job_level列”;而你之后的替换操作是在解析错误的DataFrame上做的,自然会把合并的字段变成Andrew,SSE,第二列就成了NaN。

下面给你两个靠谱的解决方法:

方法一:读取前先处理原始CSV内容(推荐)

先从S3把文件内容读出来,提前把字段末尾的反斜杠去掉,再交给pandas解析:

import boto3
import pandas as pd
import re
from io import StringIO

# 初始化S3客户端
s3 = boto3.client('s3')
bucket_name = "你的S3桶名"
file_key = "你的CSV文件路径"

# 读取S3上的CSV原始内容
obj = s3.get_object(Bucket=bucket_name, Key=file_key)
raw_csv = obj['Body'].read().decode('utf-8')

# 正则替换:匹配字段末尾的反斜杠(不管后面是逗号还是行尾)
processed_csv = re.sub(r'\\(?=\s*,|\s*$)', '', raw_csv)

# 把处理后的内容转成可读取的流,再解析成DataFrame
df = pd.read_csv(StringIO(processed_csv))

这个正则只会去掉字段末尾的反斜杠,不会影响其他位置的反斜杠(如果有的话),处理后就能得到你想要的结果:

First_NameJob_level
AndrewSSE
KyleSE

方法二:调整pandas的CSV解析参数

如果你的CSV里没有使用引号包裹字段,可以直接告诉pandas不要把反斜杠当成转义符:

import pandas as pd
import csv
from io import StringIO

# 同样先读取S3文件内容(步骤同方法一)
# ...

# 读取时设置解析参数
df = pd.read_csv(
    StringIO(raw_csv),
    quoting=csv.QUOTE_NONE,  # 告诉解析器没有带引号的字段
    escapechar=None          # 禁用反斜杠的转义功能
)

这个方法更简洁,但如果你的CSV里有带引号的字段,可能会出现新的解析问题,所以更适合字段都没有引号的场景。

备注:内容来源于stack exchange,提问作者Syed Yunus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 11:44:32