SSブログ

python いろいろ [プログラミング]

最近Pythonが気に入っている。
といってもたいしたことはしていないが、いくつかはまった点でTips
C、C++がわかっている自分から見てはまった点をいくつか

■import
オブジェクトを使うときはまずはimport
datetime.Datetimeを使いたいときは、先頭のdatetimeをインポート
import datetime
しかし毎回datetime.Datetimeと打つのは面倒な場合は
import Datetime from datetime
とすることで、Datetimeはdatetimeから使われるものとされる。便利。


■文字コード
一般的にutf-8で処理しとけというページが多いが、Windowsで日本語処理をしようとするとutf-8でもちゃんと動いてくれないし、utf-8なエディタを普段から使っていないといけない。気が向いたときにちょっと編集して動かすというスクリプト的なことをやるためにも、これは現時点では微妙だった。
いろいろ試してみると、以下のようにすることで落ち着いた

ファイルの先頭にmbcsとする(cp935とかはだめだった)
# -*- coding: mbcs -*-
正規表現(re.search)などいくつかのオブジェクトでユニコードが必要な場合は
unicode(ig,"mbcs")
などとして変換する


■文字列の扱いとprint
Cと同じ””で囲んだ場合、エスケープ処理されるが、''とシングルクォーテーションで囲った場合には処理されないので、意識して使い分けている。
また、printfのようには%記号を使って以下のようにする

>>> print "%02.2f " % 1 + "%08d" % 2
1.00 00000002

Cのprintfのようにまとめてかけたほうが見た目はいいなぁ
str.formatというのもあるらしいがリファレンスのどこを見てもわからん・・・
再び検索したらこんなのがでてきた
http://newworld.ddo.jp/doc/python-iaq-ja/index.html

def printf(format, *args):
"""最初の引数をフォーマット文字列として引数を整形、出力する。
formatが文字列でない場合は、strによって変換される。
You must use printf('%s', x) instead of printf(x) if x might
xが%やバックスラッシュを含む時はprint(x)の代わりに
print('%s',x)を使う必要がある。"""
print str(format) % args,


■浮動小数点
演算が結構てきとうらしいので、変な結果なときはdecimal.Decimalを使うといいらしい。また出力は初期設定された数字に依存するらしいので、有効数字二桁で処理したい場合は
decimal.Decimal("0.00")
とすると変な誤差が出ない。


■ハッシュ計算
多くのページでは
f = open(filename,"rb") < Cと同じでバイナリで読み込む
b = f.read()
f.close()
hashlib.sha1(b).hexdigest()

のようなことをしているが、ファイルが2Gとかあるとメモリが足りないよエラーがでてしまう。
でかいファイルで動かすためには以下のようにする

h = hashlib.sha1()
while True:
d = f.read(64*1024) #64KB
if( d ):
h.update(d)
else:
break
f.close()
h.hexdigit()で出力が得られる。


■ファイル操作
理由は良くわからんが、moveコマンドを使うとなぜかコピー操作を開始してしまう。moveの動作を期待したい場合はos.renameコマンドを使う



nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。