Pythonが面白くてしょうがいない。
のだが、Windowsで使った場合、文字コードとか改行コードとかパスのデリミタのせいでいろいろと手間がかかる。
Windows固有の手間をここにまとめる。

なお、私の使っているのはPython2。
<br /> ActivePython 2.7.2.5 (ActiveState Software Inc.) based on<br /> Python 2.7.2 (default, Jun 24 2011, 12:22:14) [MSC v.1500 64 bit (AMD64)] on win32

文字コード設定

Python2を使っていて扱うファイルがShift-JISばかりなら、PythonもShift-JISで通したほうが楽。
だってほら、いちいち変換とか面倒ですよ。

Pythonスクリプトファイルの1行目あるいは2行目には以下を記載する。

# coding: ms932

# -*- coding:という書式もあるがemacsを使わないならこれでよい。
詳細は下記リンク
http://docs.python.org/2/reference/lexical_analysis.html#encoding-declarations

default encodingの設定

デフォルトのencodingもms932にしておく。
いま現在のencodingを確かめるにはimport sysしてからsys.getdefaultencoding()する。
何もしていなければasciiのはず。

>>> import sys
>>> sys.getdefaultencoding()
'ascii'
>>>

C:\Python27\Lib\の下にsitecustomize.pyを作って以下の内容を書き込む。

import sys
sys.setdefaultencoding('cp932')

もう一度確かめればデフォルトのencodingが変わっていると分かる。

>>> import sys
>>> sys.getdefaultencoding()
'cp932'
>>>

パスの扱い方(頭にrを付ける)

Windowsのパス表記はバックスラッシュを使うが、これをそのまま使うとエスケープシーケンスとして扱われてしまう。
そこでrを頭につける。
するとrawリテラルとして扱ってくれる。

`»> print ‘c:\nowhere’ c: owhere

print r’c:\nowhere’ c:\nowhere `

http://docs.python.org/2/reference/lexical_analysis.html#string-literals

WindowsでのCSV書き込み。改行コードに注意。

Windows上PythonからCSV書き出し→ExcelなどWindowsの各種プログラムで開く→一行ごとに空行ができている\(^o^)/
CSV書き出し時改行コードのデフォルトが\r\nになっているせい。
下記のように改行コードを指定すればOK。
なお読み込みのときは指定不要。
http://docs.python.jp/2/library/csv.html#csv.Dialect.lineterminator

import csv<br /> csvhandler = csv.writer(open(r'C:\nowhere\output.csv','w'),delimiter=',',lineterminator="\n")

Shift-JISでのsqlite3

SQLite3のTEXTデータタイプはデフォルトでUTF-8。
SQLite3コネクションオブジェクトの.text_factoryアトリビュートをstrにすると、バイトストリングとして扱ってくれる。
http://docs.python.org/2/library/sqlite3.html#sqlite3.Connection.text_factory

import sqlite<br /> conn = sqlite3.connect(dbfile)<br /> conn.text_factory = str

pylab(Matplotlib)のグラフで日本語表示

pylabで作ったグラフは、UTF-8でないとダメなようだ。
こればかりはunicodeにエンコードしてpylabに入力する。
しかしUTF-8であっても、そのままでは日本語を表示してくれない。
下記のようにフォントを指定する。

import pylab<br /> pylab.rcParams['font.family'] = 'VL Gothic'<br /> pylab.rcParams['font.size'] = 12

更新履歴

2013/5/17 初版
2013/5/10 sqlite3のtextでUTF-8でなくバイトストリングを扱う方法を追記
2013/5/24 pylabグラフで日本語使うときの注意を追記
2013/9/12 default encodingの件を追加