132件中 16-20件目     [ 1 2 3 4 5 6 7 8 9 10 ... ]

hashlibモジュールでセキュアハッシュ(メッセージダイジェスト)を作成し、digestメソッドを使うとバイナリデータを返される。hexdigestメソッドを使えば[0-9a-f]で表した文字列を取得できるが、[f-zA-Z]の文字が使われていない分、長い文字列となる。

#!-*- coding:utf-8 -*-
import hashlib

md5 = hashlib.new('md5')
md5.update('この文字列のハッシュを取得します。')
print repr(md5.digest())
print md5.hexdigest()
'1,\xb8-\x1b\x83\xc2P(C\xa8h\xa8\x1a\xa0/'
312cb82d1b83c2502843a868a81aa02f

そこでバイナリデータを[a-zA-Z0-9]で表した文字列に変換する関数とその逆変換を行う関数を作ってみた。


先日、「Surgo: BigTableで悩む」という記事を見つけた。Google App EngineでTwitterのようなアプリケーションを作るにはどうすればいいかについて悩んでいるらしい。どうやら「Surgo: BigTableはPUSH型で」によるとPUSH型で作るということで解決(?)はしたようだが、PULL型でgoogle.appengine.ext.db.Queryの機能を使ってソートしたデータを取得するようなことはできないのだろうか?

Google App Engineの練習問題としては面白そうだったので、実際に簡単なサンプルを作って考えてみることにした。

(※実は私はTwitterを使ったことがなく、あまり詳しくは知らないので機能に関して誤解があるかもしれない。)


落ち着いて素数を数えるんだ! ということで作ってみた。

半分くらいネタで作ったけど、たぶん近いうちに使う。素数判定は『素因数分解をする[C++]』と同じように簡単なアルゴリズムで、特に難しいアルゴリズムは使ってない。intの範囲を超えるような素数を扱うような予定はないので、とりあえず、これで十分だと判断した。


doctestモジュールは、テストコードとその結果をコメントとして書くことで自動的にテストを行ってくれるものだ。テスト用のコードは一度確認した後は、保存することすらしなかったり、しばらくして消してしまったりすることもあるが、doctestのようにコメントにテストコードを書けば、それは実行例としてコメントに残るし、コードを変更した場合にはそれを使ってテストができる。

例えば、与えた引数xを2倍にして返す関数では以下のようになる。

#!-*- coding:utf-8 -*-
def double(x):
    """ 与えられた数の2倍を返す関数。
    
    >>> double(3)
    6
    
    >>> double(10)
    20
    
    >>> double(8)
    16
    
    """
    return x * 2

if __name__ == "__main__":
    import doctest
    doctest.testmod()

このファイルを直接実行すれば、if文の中が実行されテストコードが実行される。このとき、何も出力されなければ問題ない。 直接実行せずにimportした場合には、if文の中が実行されることはない。


Pythonではurlparseモジュールのurlparse関数を使うことでURLをパースすることはできるが、この関数ではURLをscheme、netloc、path、parameters、query、fragmentの6つに分解するだけで、ポート番号を取り出したり、ファイル名を取り出すようなことまではやってくれない。

#!-*- coding:utf-8 -*-
import urlparse

url = u'http://user:pass@www.xxxxx.co.jp:8080/test/index.php?id=564&name=test#comment'
print urlparse.urlparse(url)
(u'http', u'user:pass@www.xxxxx.co.jp:8080', u'/test/index.php', '', u'id=564&name=test', u'comment')

そこで、URLをもっと細かくパースする関数と、そのパースした結果をURLに戻す関数を作ることにした。


132件中 16-20件目     [ 1 2 3 4 5 6 7 8 9 10 ... ]