Post

Excel 保存文件为 csv 格式时,读取时出现存在 BOM 问题

Excel 保存文件为 csv 格式时,读取时出现存在 BOM 问题

问题描述

当我们使用 Excel 保存文件为 CSV utf-8 格式时,使用如下代码读取 .csv 文件时

1
2
3
4
5
6
import csv

with open(file_path, "r", encoding='utf-8') as f:
    
    data = list(csv.reader(f))
    print(data)

会发现读取的字符串中出现 [['\ufeffname', 'age', 'city'], ...] 这种情况,即第一个单元格字符串前面出现 \ufeff

解决方法

出现这种情况的原因是因为当我们使用 Excel 保存 CSV 文件时,Excel 会自动在文件开头添加一个字节顺序标记(BOM, Byte Order Mark),即前面提到的 \ufeff

如果想要解决这个问题,有如下两种解决方法

  1. 修改打开文件的编码方式为 utf-8-sig

    1
    
    with open(file_path, "r", encoding='utf-8-sig') as f:
    
  2. 使用 pandas 库读取 CSV 文件

    1
    2
    3
    4
    
    import pandas as pd
        
    df = pd.read_csv(file_path)
    print(df)
    
This post is licensed under CC BY 4.0 by the author.