Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

\ufeffって???

More than 1 year has passed since last update.

背景

今回、とある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」の分もしっかりカウントしてくれました!!

msk02
現在社会人1年目!! 事業開発やマーケティングプランナーをしながらたまにPython使ってWEBスクレイピングとか実装してます。 大学では深層学習、機械学習、また長期インターン先でpythonを用いてデータの前処理などを学んでおりました! 筋トレ、サッカー、自転車旅、スポーツ大好きです!!
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away