Edited 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」の分もしっかりカウントしてくれました!!