2015年1月10日 星期六

Python 處理 UTF-16 的 CSV

Python 內建的 csv 模組預設無法處理 UTF-16, 直接讀的話會出現

Error: line contains NULL byte

自行轉換編碼成 UTF-8 即可,作法如下:

import codecs
import csv

# 用 codecs 解碼 utf-16 為 unicode object
f = codecs.open(filename, 'rU', 'utf-16') 

# 再轉回 utf-8 給 csv.reader 用
cr = csv.reader(line.encode('utf-8') for line in lines)
for row in cr:
   # row 的內容就是 CSV parse 完的結果

或是先用 iconv 轉檔, 再用 Python csv 模組處理亦可:

$ iconv -f utf-16 -t utf-8 file_in_utf16 > file_in_utf8

備註: Python csv 模組不接受 unicode 的輸入,若來源不是檔案,也要記得轉成 utf-8 再傳入 csv.reader()

沒有留言:

張貼留言

C++ 能否用 memcpy 複製 class / struct 的資料?

答案是: POD (plain old data) type 可以。POD type 可和 C 互通, CPP Reference POD Type 的介紹: Specifies that the type is POD (Plain Old Data) type. Thi...