スポンサーリンク
csv.writerの書き込み時に,.(ドット)にて,数字が分割されるという謎の状態にハマりました.
例えば,2.0や3.0をcsv.writerで書き込みたい場合に,以下のような状態になりました.
その時のコードはこちらご覧の通り,2.0が3つのセルに分かれてしまいました.
# error_data[m][0] = 2.0とか3.0とかの数値をcsvファイル から読み取り,配列に入れている.
writer = csv.writer(f,lineterminator='')
writer.writerow(str(error_data[m][0]))
writer.writerow(error_data[m][0])がきもです.
何故か分かりませんが,文字列あるいは,変数としてwriter.writerowに書き込んでしまうと,2.0のような”.”つきの数値の書き込みがおかしくなります.
解決策としては,2つあります.
1つ目(これはあまりいい方法ではありません).
sss = data[m][0],0
writer = csv.writer(f,lineterminator='')
writer.writerow(sss)
おかしい数値の部分でセルが別れてしまう場合は,変数に2つ以上の数値を代入しておけば,なおります.
上記のコードを書いた場合の出力.どうでしょう.2.0が1つのセルに入ったでしょう?
ただ,0が邪魔です.
0使わねーし…
ということで,2つ目の方法.
writer.writerowの()内の記入方法を変える.
writer.writerow([error_data])のように,[]内に配列名を入れましょう.
そうすると,コンマでセルが別れるといったクソな状況を回避できます.
writer = csv.writer(f,lineterminator='')
writer.writerow([error_output[m],error_data[m][1],error_data[m][2]])
スポンサーリンク
結果は,これ.
1つ目のセルだけ,どうして".0"が省略されるか分かりませんが,まあ,目的は達成できました.
上記のように,配列の中に更に配列を入れることによって,きれいに数値入れることが可能になります.
みなさんもやってみて下さい.
番外編
lineterminatorをいじって,セルの.分割を防ごうとしましたが,うまくいきませんでした.writer.writerowに配列を入れる場合は,純粋に["配列[]"]のほうが良いのかなと思います.
ちなみに,この.で数値とセルが分割されてしまうというエラーを調べてみると,どこにもヒットせず…
自力で模索すること2日間…
pandasでためそうかなやんで1日間…
リストをnp.array()で配列化に変換してみてファイルに書き込むこと1日間…
時間にして,100時間はファイル書き込みに費やしました…
みなさんも,コンマでセルと数値が分割されてしまう場合は,上記のコードを参考にしてみて下さい.
スポンサーリンク
0 件のコメント:
コメントを投稿