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の件を追加