背景
今回、とあるcsvファイルに対して、pythonで読み書きしていました。
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'
を指定する必要がありました!!
実際に以下のように指定すると、、、
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」の分もしっかりカウントしてくれました!!