4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

値にカンマが含まれるCSVをパースする

Posted at

カンマって値中に入っていがちなので、カンマ区切りのファイルってめんどくさいですよね。

例えばこんなファイルから

1,A,apple,pie
2,B,"banana,blueberry",juice
3,C,cherry,pie

次のように3列目だけ抜き出したい場合

apple
banana,blueberry
cherry

カンマで区切ろうとすると値中のカンマが邪魔になります。

いろいろ考えてみたのですが、次の手順が比較的簡潔なのかなと思いました1

  1. 行をダブルコーテーションで区切ってタプルに入れる
  2. タプルの奇数番目にあるカンマを別の文字(この例では空白2)に置換する
  3. 2を結合した後、カンマで区切る
parseComma.py
for line in inFh:
    line = line.rstrip()
    cols = line.split('"')

    tmp = [col.replace(",", " ")
           if ind%2==1 else col
           for (ind, col) in enumerate(cols)]

    line = "".join(tmp)
    cols = line.split(",")
    以下略

調べないで書きますが、もしかしたらこういうののいいパーサーがあるのかもしれないですね。

ついでにどうでもいいことですが、カンマなのかコンマなのか、ダブルコーテーションなのかダブルクォーテーションなのかも悩ましいです。

  1. ここでは値中のカンマは別文字に置き換えていいものとしています。あと、値中にダブルコーテーションが含まれた場合は考慮していません。

  2. 後でカンマに戻すならもっと特殊な文字がいいかも

4
5
4

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
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?