Monthly Archives: 5月 2013

[python] WindowsでのPython2

Pocket

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

なお、私の使っているのはPython2。

ActivePython 2.7.2.5 (ActiveState Software Inc.) based on
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
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
conn = sqlite3.connect(dbfile)
conn.text_factory = str

 

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

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

import pylab
pylab.rcParams['font.family'] = 'VL Gothic'
pylab.rcParams['font.size'] = 12

 

更新履歴

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

No tags for this post.

[Python] PythonとActivePython

Pocket

MIT(マサチューセッツ工科大学)のオンラン講義、John Guttag先生のIntroduction to Computer Science and Programmingを視聴して感動したのでPythonをいじってるのである。

Windowsにおいて、最初はPortableAppのPythonを使っていたのだが、本格的に試してみたくなった。
のだが、実際のインストールを考えると、選択肢は二つあって、公式PythonとActiveStateのActivePythonがあるようだ。

違いは何か。
端的に言えば、両者に違いはそうそうなくて、ActivePythonには最初からいろいろなものが付いてくるので楽、といったところ。
自分の場合、職場PCにインストールが許容されているActivePythonをインストールしたのだが、zipなどのよく使うモジュールは最初から入ってるし、SQLite3もついてきた。
セキュリティポリシー上、インターネットへの接続や、インストールできるソフトウェアが制限されるケースでは、これは便利ではないだろうか。

追記:
と思ったら、ActivePythonにはPylab(Matplotlib)がない(Windows 64bit)。これは痛い

なお、idleはWindowsならC:\Python27\Lib\idlelib\idle.batから起動できる。

Why does ActivePython exist?

What is the difference between active python and python?

Pythonが普及しない原因 <大げさ

No tags for this post.