2013年1月17日 星期四

[小技巧]csv.writerow寫入多出空白一行問題解決

最近在做資料處理時發現,使用csv模組的writerow做多筆寫入時,每筆之間會莫名其妙空一行。這樣的狀況在記事本看不出來,用excel就會發現了。根據網路查詢得知,windows系統下會幫每一行結尾多加一個看不見的"進位符號",然而這個動作writerow本身就會幫我們做,所以等於重複按Enter兩次。避免這種狀況一般常見的解決方法是以binary的方式開啟檔案:

f = open("xxx.csv","wb")
c = csv.writer(f)

然而這種方法在Python 3 下會產生錯誤:


ValueError: binary mode doesn't take a newline argument


在花了我一個下午找尋,才終於找到解決辦法,而且極其簡單,讓這一下午的心血變得很不值…


f = open('xxx.csv', 'w', newline='')

後面加個newline=’ ‘的參數就好了。不過這招在Windows系統下有用,不知道到了Linux下會不會變成完全不會進位了? 這就有賴相關平台的朋友告知~

5 則留言:

  1. thank for your information! Here I can provide extra information bout the similar top.

    If newline='' is not specified, newlines embedded inside quoted fields will not be interpreted correctly, and on platforms that use \r\n linendings on write an extra \r will be added. It should always be safe to specify newline='', since the csv module does its own (universal) newline handling.

    回覆刪除
  2. 謝謝大哥 一個下午的努力 讓我很快就找到解法

    回覆刪除
  3. 感恩大大 讚嘆大大
    讓我們省了一個下午的時間~

    回覆刪除