銀月の符号

Python 使い見習いの日記・雑記

md5 のチェックを Python で

md5sum なんて入ってないけれども Python (2.5 以上の 2系)ならある、という奇特なパソコンで役に立つかもしれないスクリプト。 md5sum -b spam.txt っぽい動作をする。 -t や -c 相当の動作はない。引数なし時や - 指定時に標準入力から読むという動作もない。

import sys
import hashlib

def md5hexdigest(path):
    ha = hashlib.md5()
    with open(path, 'rb') as f:
        while True:
            data = f.read(8192)
            if not data:
                break
            ha.update(data)
    return ha.hexdigest()

def main():
    import sys
    for arg in sys.argv[1:]:
        try:
            md5digest = md5hexdigest(arg)
            print u'%s *%s' % (arg, md5digest)
        except IOError, e:
            print >> sys.stderr, e

if __name__ == '__main__':
    main()

追記、ソースの Tools/scripts に md5sum.py というスクリプトが存在する。上記コードよりも高度。しかし、ちょっと古い(2003年製。 md5, getopt モジュール使用)。あと、 -c オプションはない。