使用pandas read_csv解析带BOM文件时遇EOF错误的解决方法
解决带BOM的CSV文件pandas解析报错问题
错误根源
- 核心问题:你提供的CSV文件最后一行(行7)的最后一个字段缺少闭合的双引号,解析器读到文件末尾时发现字符串未结束,直接触发EOF相关错误。
- BOM问题:文件带UTF-8 BOM,但你用
utf-8-sig解码的操作已经处理了BOM,这不是报错的关键。
解决方法
方法1:修复原始文件(推荐)
直接补全最后一行末尾的双引号,把最后一行结尾从hepatitis改成hepatitis."。修复后用常规代码即可正常解析:
import pandas as pd from io import BytesIO df = pd.read_csv(BytesIO(file_data), encoding='utf-8-sig')
注:encoding='utf-8-sig'能让pandas自动识别并移除UTF-8 BOM,无需手动转码。
方法2:解析时自动修复(适合无法修改源文件的场景)
如果没法修改原始文件,可以先处理数据补全引号,再解析:
import pandas as pd from io import BytesIO # 解码带BOM的字节数据为字符串 file_content = file_data.decode('utf-8-sig') lines = file_content.splitlines() # 检查每一行的引号是否成对,补全未闭合的 fixed_lines = [] for line in lines: if line.count('"') % 2 != 0: fixed_lines.append(line + '"') else: fixed_lines.append(line) # 重新编码后解析 fixed_data = '\n'.join(fixed_lines).encode('utf-8') df = pd.read_csv(BytesIO(fixed_data), encoding='utf-8')
或者直接跳过有问题的行(不推荐,会丢失数据):
df = pd.read_csv(BytesIO(file_data), encoding='utf-8-sig', engine='python', on_bad_lines='skip')
内容的提问来源于stack exchange,提问作者comonadd
相关产品推荐
相关产品推荐

