场景
今天在使用csv.DictReader()函数读取csv文件将数据导入mysql时,读取第一列数据的字段一直抛出异常。
原因
文件读取时,无法读取到第一列的内容 原因: 用uft-8-sig方式写入的csv文件带有bom头
起因是读取csv文件使用的是utf-8方式读取文件,但csv文件是用uft-8-sig方式写的
两者区别如下:
1、”utf-8“ 是以字节为编码单元,它的字节顺序在所有系统中都是一样的,没有字节序问题,因此它不需要BOM,所以当用"utf-8"编码方式读取带有BOM的文件时,它会把BOM当做是文件内容来处理, 也就会发生类似上边的错误.
2、“uft-8-sig"中sig全拼为 signature 也就是"带有签名的utf-8”, 因此"utf-8-sig"读取带有BOM的"utf-8文件时"会把BOM单独处理,与文本内容隔离开,也是我们期望的结果.
故改成 encoding='utf-8-sig' 就可以成功读取csv文件的第一列了