search
LoginSignup
31
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

\ufeffって???

背景

今回、とあるcsvファイルに対して、pythonで読み書きしていました。

open_csv.py


    with open("data/*****/*****.csv") as f:
        for line in f:
            strs = line.split(",")
            column.append(strs)
            margin = column.count('')
        print(margin,column) 

このようにcsvファイルを1行づつ読み込み、「","」で区切り代入し、printすると、

6,['\ufeff', '', '', '', '', 'A', 'B', '', '', 'C']

このように出力されました。
今回は「''」の個数を数えていきたかったので「\ufeff」が邪魔でした。
「\ufeff」って何???どうすれば消えるの???と思い調べました!!

BOM

調べて見たところUTF-8にはテキストの始まりをプログラムに伝える為のデータ内のマークがあります。これは通称BOMと呼ばれるそうですが、このBOMのユニコード表示が「\ufeff」ということですね!!

BOMの消去

このBOMを消去するには「BOMありUTF-8」と「BOMなしUTF-8」の選択をする必要があるそうです。
この選択にはcsvファイルを読み込む際のopenに引数encoding='utf-8-sig'を指定する必要がありました!!
実際に以下のように指定すると、、、

BOM_open_csv.py

    with open("data/*****/*****.csv",encoding = "utf-8-sig") as f:
        for line in f:
            strs = line.split(",")
            column.append(strs)
            margin = column.count('')
        print(margin,column) 

7,['\ufeff', '', '', '', '', 'A', 'B', '', '', 'C']
以下のように正しく「\ufeff」の分もしっかりカウントしてくれました!!

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
31
Help us understand the problem. What are the problem?