python处理BOM

做文本处理的同学在windows下工作可能经常会遇到带BOM的utf-8编码文件,这时需要对文件头BOM处理一下,不然会带来一些不好的影响。BOM字符的表示是codecs.BOM_UTF8。
首先要明确一点,在Python2中,codecs.BOM_UTF8是str类型,如果要与unicode进行对比的话需要转换一下。
下面展示Python2采用不同的读文件方式时处理BOM的代码:

with open("test.txt", "r") as fr:
    for line in fr:
        if line[:3] == codecs.BOM_UTF8:
            line = line[3:]
        print line
import codecs
with codecs.open("test.txt", "r", "utf-8") as fr:
    for line in fr:
        if line[0].encode("utf-8") == codecs.BOM_UTF8:
        # 或使用
        # if line[0] == codecs.BOM_UTF8.decode("utf-8"):
            line = line[1:]
        print line

python3中比较简单,只有一种方式,代码如下:

with open("test.txt", "r") as fr:
    for line in fr:
        if line[0] == codecs.BOM_UTF8.decode("utf-8"):
            line = line[1:]
        print line
import codecs
with codecs.open("test.txt", "r", "utf-8") as fr:
    for line in fr:
        # 代码与上面一样
        if line[0] == codecs.BOM_UTF8.decode("utf-8"):
            line = line[1:]
        print line

最好养成这样写代码的好习惯,永不再出错。

得大神指点,有一种最简便的方式

指定编码方式为“utf_8_sig”即可解决删除文件头BOM

import codecs
with codecs.open("test.txt", "r", "utf_8_sig") as fr:
    for line in fr:
        print line
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 字符集和编码简介 在编程中常常可以见到各种字符集和编码,包括ASCII,MBCS,Unicode等字符集。确切的说...
    兰山小亭阅读 12,853评论 0 13
  • 可以看我的博客 lmwen.top 或者订阅我的公众号 简介有稍微接触python的人就会知道,python中...
    ayuLiao阅读 8,455评论 1 5
  • Python 二三事 面向初学者介绍Python相关的一些工具,以及可能遇到的常见问题。 最后更新 2013.5....
    hzyido阅读 67,841评论 2 42
  • 引言 在这里我假设你已经看完了一篇Python教程,基本熟悉了Python的结构和语法,在命令行下的Python互...
    Programmer客栈阅读 65,154评论 0 17
  • 月牙儿凉如水 夜色,美如画 我站在原地 站在星空斜长的影子里,等你 等你轻声唤我 说,我就在这里 哪儿也不去 夜空...
    Victoria的洛丽塔阅读 3,226评论 0 1