More than 1 year has passed since last update.

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

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

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. 後でカンマに戻すならもっと特殊な文字がいいかも