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

如何用Python读取多编码CSV并自动跳过前8行说明内容?

解决CSV文件跨编码说明行与数据行的自动读取问题

问题核心

你的CSV文件前8行是utf-8编码的说明内容,第9行是空行,实际数据从第10行开始且采用cp1252编码,直接用单一编码读取会导致乱码,手动删行无法适配动态更新的文件。


方案一:直接指定编码与跳过行数(简单高效)

如果头部说明用cp1252读取不会导致行计数错误(绝大多数场景下都适用),直接利用pandas的skiprows参数跳过前9行,同时指定数据部分的编码为cp1252:

import pandas as pd
import os

current_path = os.getcwd()
print(current_path)

# 跳过前9行(8行说明+1行空行),用cp1252编码读取数据
data = pd.read_csv(
    'Events.csv',
    encoding='cp1252',
    skiprows=9,  # 从第10行开始读取数据
    header=None,  # 数据行无表头
    names=range(20)  # 匹配你需要的列数
)

方案二:分编码读取(极端场景兜底)

若头部说明包含cp1252无法解析的特殊字符,导致行分割异常,可通过二进制读取拆分文件后分别解码:

import pandas as pd
import os
from io import StringIO

current_path = os.getcwd()
print(current_path)

file_path = 'Events.csv'

# 二进制读取整个文件,避免编码冲突
with open(file_path, 'rb') as f:
    content = f.read()

# 按换行符拆分二进制内容,提取第9行之后的数据段
binary_lines = content.split(b'\n')
data_binary = b'\n'.join(binary_lines[9:])

# 将数据段用cp1252解码为字符串,再传入pandas读取
data_str = data_binary.decode('cp1252')
data = pd.read_csv(
    StringIO(data_str),
    header=None,
    names=range(20)
)

错误原因说明

你之前的代码用utf-8编码读取整个文件,而数据部分实际是cp1252编码,导致数据行解析乱码,出现s和大量NaN;同时未跳过前9行,说明行被当作数据行处理,进一步引发列数不匹配问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 01:15:11