Hatena::Grouppython

yanbe.py このページをアンテナに追加 RSSフィード

2008-07-31

Pythonのバッドノウハウ(1) - csvモジュールのwriterでマルチバイト文字列を扱う場合Shift_JISに変換して渡す

13:52 |  Pythonのバッドノウハウ(1) - csvモジュールのwriterでマルチバイト文字列を扱う場合Shift_JISに変換して渡す - yanbe.py を含むブックマーク はてなブックマーク -  Pythonのバッドノウハウ(1) - csvモジュールのwriterでマルチバイト文字列を扱う場合Shift_JISに変換して渡す - yanbe.py  Pythonのバッドノウハウ(1) - csvモジュールのwriterでマルチバイト文字列を扱う場合Shift_JISに変換して渡す - yanbe.py のブックマークコメント

私がPythonを使い始めたのは卒論が始まった2005年5月ぐらいで, 当時のPythonはリリース版のバージョンが2.4で日本語codecが標準搭載された時期でした.

何年か使ってるとはまりやすいところも分かってくるので,ここの位置づけとしてはPythonを使っていく上ではまりがちな部分のノウハウ(バッドノウハウ)や,その他上手い(pythonicな)コードの書き方を共有する場にしたいと思います.

Pythonで何かデータ処理をするにあたってcsvモジュールは使用頻度が高いモジュールの一つだと思うのですが,特にWindows以外で開発していてはまりがちなのが

csvモジュールのreaderオブジェクトでマルチバイト文字を扱う場合,文字コードはShift_JISを前提とされている(らしい)

ということです.これに気づかずにUnicodeEncodeErrorが送出されて1時間ほどはまりました.以下のようにShift_JISに変換してやる必要があります.

outfile = open('hoge.csv', 'wb')
csvwriter = csv.writer(outfile)
for utf8string in utf8strseq:
  csvwriter.writerow(utf8string.encode('sjis'))

しかし,なんでShift_JISを前提としているのでしょうか..何か歴史的な理由があるのかな?

もし上記が間違っていたら指摘していただけるとありがたいです.

tokuhiromtokuhirom2008/07/31 14:00http://www.python.jp/doc/release/lib/module-csv.html
制限事項はマニュアルにかいてあります。

KamberleyKamberley2011/07/26 18:36These pieces ralely set a standard in the industry.

udjewgiuzvnudjewgiuzvn2011/07/27 20:43nf5f9P <a href="http://xuuzubcarnst.com/">xuuzubcarnst</a>

sucofysucofy2011/07/28 02:14mzOo53 , [url=http://oyxvazneeqsc.com/]oyxvazneeqsc[/url], [link=http://jewrarpfqmod.com/]jewrarpfqmod[/link], http://ujljhmokplcx.com/

tahdegzzqtahdegzzq2011/07/29 20:57lbK99t <a href="http://ixekliixttvz.com/">ixekliixttvz</a>

mhrwzajenmhrwzajen2011/07/30 21:22hGsoRw , [url=http://mezqrcupnxxg.com/]mezqrcupnxxg[/url], [link=http://nvrmytlgfgsw.com/]nvrmytlgfgsw[/link], http://crklymfseckk.com/