2011-01-01から1年間の記事一覧

.pycファイルを作成させない方法メモ

Python に Bオプションを付けるか、環境変数 PYTHONDONTWRITEBYTECODE を作ると .pycファイルが作成されなくなる。具体的には python -B foo.py のように実行するか、 :: Windows cmd の場合 set PYTHONDONTWRITEBYTECODE=1 foo.py # Linux bash の場合 expo…

collections.Counterの使用例

だいぶ前に defaultdict について書いたけど、出現回数のカウントは collections.Counter クラスの方がシンプルに書ける。 # Python 3.2.2 from collections import Counter c = Counter('abrakadabra') for k, v in c.items(): print(k, '----', v) # 結果:…

winregのREG_DWORDの扱いがちょっと

Python にはレジストリを扱うために winreg というライブラリがついてくるけれど、REG_DWORD の扱いに少し問題があることがわかった。 問題1:大きな整数が正しく読み込めない 例えば 4294967173 という大きな数を読もうとすると、-123 になってしまう。 # …

"\x1a" で入力が止まってしまう

Windowsで "\x1a" を含むテキストファイルをCPythonに読ませると、途中で読み込みが停止してしまうようだね。 # CPython 2.7.2 on Win32 with open('a.txt', 'wb') as fout: fout.write("abc\x1adef") with open('a.txt', 'r') as fin: print fin.read() # …

WriteFileでWCHARを書き込む方法とか

C

ワイド文字列を WriteFile() でファイルに書き出してみる。 #define UNICODE #include <windows.h> #include <stdio.h> void test(HANDLE file) { WCHAR s[] = L"あいうえお"; DWORD written; WriteFile(file, s, 5 * sizeof(WCHAR), &written, NULL); } int main() { HANDLE fil</stdio.h></windows.h>…

コーデックmbcsでは例外が発生しない

_winreg の件を調べていて気付いたんだけど、コーデック mbcs は変換できない文字に出会っても例外を発生させないね。 # Python 2.7.1 # ↓ハングルと簡体字が含まれてます data = u'\ud55c\uae00 and \u7b80\u4f53\u5b57' print data.encode('mbcs') # 出力…

Python2.7の_winregでは読めない文字がある

_winreg にある関数に REG_SZ 値を取得させると、 unicode を返すようになっている。でも、内部では ANSI 版の Widnows API を使っているので、cp932(≒Shift_JIS)に含まれない文字が化ける。例えば、韓国語のハングルや、中国語の簡体字を日本語版の Windo…

.pycファイルを作成する方法メモ

時々しかやらないから方法をいつも忘れるな。モジュール compileall か py_compile を使うと .pyファイルをコンパイルして .pycファイルを作成できる。これらのモジュールは直接実行できるようになっているので、例えば foo.py をコンパイルするにはこうする…

レジストリの用語が統一されていない

レジストリについて調べていたら、文書毎に用語が統一されていないことに気付いた。とりあえず見つけたものを表にしてみた。 自分が使っている用語 別名 ルートキー メインキー、定義済みキー 値 値エントリ、レジストリエントリ 既定値 標準の値、既定の値…

明後日の場所でUnicodeDecodeError

Google App Engine の webapp フレームワークを使ってコードを書く。↓これは大丈夫だが、 class Page1(webapp.RequestHandler): def get(self): self.response.headers['Content-Type'] = 'text/plain' self.response.out.write('abc') self.response.out.wr…

数字をコンマで区切る

いつの間にか数字をコンマで区切る方法がやけに簡単になってるな。 # Python 3.1 print("{:,d}".format(1234567890)) # 1,234,567,890 さらに書式指定を n にすると、ロケールに合わせた桁数と文字で区切ってくれる。例えばドイツでは3桁ごとに . で区切っ…