2014-07-20 62 views
3

我想創建一個文件的校驗和並將校驗和保存爲一個文件。所以,我監視這個文件,如果校驗和改變了,那麼我會做一些事情。如何在Python中創建文件的校驗和

這裏是校驗

對於test.txt的

contents: a 
checksum: dd18bf3a8e0a2a3e53e2661c7fb53534 

我編輯的文件:

contents: aa 
checksum: dd18bf3a8e0a2a3e53e2661c7fb53534 

這裏是我的代碼:

python -c 'import hashlib;print hashlib.md5("test.txt").hexdigest()' 

爲什麼是校驗和一樣嗎?

回答

2

您可以嘗試檢查hashlib.md5()

import hashlib 
[(fname, hashlib.md5(open(fname, 'rb').read()).digest()) for fname in fnamelst] 
+0

這不會爲大型文件。 –

+0

不需要大文件。但是我用hexdigest()來代替,並且需要儘可能靠近一個班輪。 – Tampa

+0

md5已損壞,不應使用。 – NDEthos

5

爲什麼校驗和一樣?

因爲您正在計算相同內容的散列test.txt

這是一個通用工具(,在許多Linux和UNIX平臺上可用的廣泛可用的CLI工具的克隆),可以很好地擴展大型文件。

md5sum.py:

#!/usr/bin/env python 

"""Tool to compuete md5 sums of files""" 

import sys 
from hashlib import md5 


def md5sum(filename): 
    hash = md5() 
    with open(filename, "rb") as f: 
     for chunk in iter(lambda: f.read(128 * hash.block_size), b""): 
      hash.update(chunk) 
    return hash.hexdigest() 


def main(): 
    if len(sys.argv) < 2: 
     print "Usage: md5sum <filename>" 
     raise SystemExit(1) 

    print md5sum(sys.argv[1]) 


if __name__ == "__main__": 
    main() 

從借來的塗抹適量:https://bitbucket.org/prologic/tools/src/tip/md5sum