2009-07-09 36 views
1

私は後で比較として使用できるファイルのリストに対してCRC(または同様の)値を生成して保存したいと思っています。これを行うための関数を書くのは簡単ですが、Pythonライブラリ内でそれを行うための標準的な方法がありますか?Pythonデータ/ファイルCrc

生成される値は、特定の標準である必要はありません。

答えて

5

hashlibをお勧めします。これは、多くの異なる安全なハッシュアルゴリズムとメッセージダイジェストアルゴリズムに共通のインタフェースを実装しています。 FIPS安全ハッシュアルゴリズムSHA1とMD5が含まれています。 デモコード:

import hashlib 
m = hashlib.md5() 
for line in open('data.txt', 'rb'): 
    m.update(line) 
print m.hexdigest() 
##ouput 
1ab8ad413648c44aa9b90ce5abe50eea 
+0

単純なhashlib.md5(my_file.read())? – kjfletch

+1

@kjfletch、簡単なデモコードで回答を更新しました。md5を1行ずつ簡単に読み込み、os.walk(http://docs.python.org/library/)でこの機能を使用できます。 os.html#os.walkにはサンプルがあります)、必要に応じてすべてのファイルのmd5を計算します。 – sunqiang

+2

@sunqiang: 'for line in open()'はバイナリファイルからかなり長い "行"を返す(しようとする)かもしれません。おそらく 'block = f.read(BLOCKSIZE);を使うのは良い考えです。 m.update(ブロック) 'を使用して、予測可能で安全なメモリ使用を実現します。 –

1

あなたはまた、文書化hereとして、zlib.crc32またはzlib.adler32を使用することができ、一方向のセキュリティを必要としない場合。

+0

adler32がcrc32より速く実行されますが、 crc32と同様にエラー検出に優れています。アプリケーションにチェックサム(ファイル)が添付されている場合、adler32は使用しないでください。圧縮されたファイルにチェックサム(圧縮されていないファイル)が添付されています。 –