BOMとPython

動機

あるファイルをMac OS Xで扱っていたらおかしかったので調べた

詳細

  • seabornでplotしたときに下記エラーが発生した
  • matplotlibのときは付いたままでも問題なかった
ValueError: could not convert string to float: '\ufeff2013-11-18'

\ufeff

  • BOM BEでした
  • Mac で遭遇したの初めてで確認方法がわからなかったので調べた
  • Windowsではsakura editorで別のEncodingに変換してた

確認

file *.csv
data.csv:   DBase 3 data file with memo(s)
sample.csv: ASCII text
test.csv:   UTF-8 Unicode (with BOM) text
train.csv:  UTF-8 Unicode (with BOM) text

Pythonにおける扱い

下記参照

  • http://docs.python.jp/3.5/library/codecs.html#codecs.BOM
  • http://docs.python.jp/3.5/library/codecs.html#standard-encodings
    • 表いちばん下
  • http://docs.python.jp/3.5/library/codecs.html#module-encodings.utf_8_sig

削除せずに読み込む

Pythonにおける扱いのutf_8_sigをencoding指定する

削除してしまう

  • awk, sed, nkf等で処理する
  • 定数として存在するので利用する

codecs_BOM_BE.py

import codecs
print(codecs.BOM_BE) # => b'\xfe\xff'