環境
MAC
python 2.7系
やりたいこと
ローカルに存在するcsvファイルに、新しい行を書き込んであげたかった。
なぜかこれが上手くいかなかったので、まとめてみる。
コード
import csv
c = csv.writer(open(path, 'w'))
lst = ['a','b','c','d']
lst.append('\n')
c.writerow(lst)
これで日本語ソースのサイトを見てみると上手く動くらしい。自分が試すと上手くいく時といかない時があったが、ほとんどの場合でアウト!
解決策
import csv
c = csv.writer(open(path, 'a'))
lst = ['a','b','c','d']
lst.append('\n')
c.writerow(lst)
open() のところのmode を'w' -> 'a'
に直してあげた。
既存のファイルに書き込みたかっただけだから'a'で問題ないらしい。
日本語ソースを探せなかったググり力不足
ここのサイトに詳しい記述があった。
読み込み処理は一切行わずに書き込み処理のみを行うと、(そのままでは)ファイルの先頭からデータを上書きしていくが、書き込んだ長さが元のデータより短いと、書き込んだデータが終わったところより後ろは元のデータが残る。
なるほどぉ〜
結果
納期、間に合いませんでした。なんで間に合わなかったかというと、実行時間が長いから、スクリプト動かしたまま寝ちゃったんですね
朝起きたらcsvファイルが1行しか存在しなくて、絶叫してもう一回寝ました。