2009-07-09 6 views
1

Ich möchte einen CRC (oder ähnliche) Wert für eine bestimmte Liste von Dateien generieren und speichern, die zu einem späteren Zeitpunkt als Vergleich verwendet werden können. Das Schreiben einer Funktion ist einfach genug, aber gibt es einen Standard-Weg, dies in den Python-Bibliotheken zu tun?Python Daten/Datei Crc

Der generierte Wert muss keinen bestimmten Standard haben.

Antwort

5

empfehlen hashlib, es implementiert eine gemeinsame Schnittstelle zu vielen verschiedenen sicheren Hash-und Message Digest-Algorithmen. Enthalten sind die sicheren Hash-Algorithmen SHA1 und MD5 von FIPS. ein Demo-Code:

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

Eine einfache hashlib.md5 (my_file.read())? – kjfletch

+1

@kjfletch, Ich habe die Antwort mit einem einfachen Demo-Code aktualisiert, es md5 Zeile für Zeile zu aktualisieren, um das System einfach zu laden, und Sie können diese Funktion mit os.walk verwenden (http://docs.python.org/library/ os.html # os.walk hat ein Beispiel), um jede Datei md5 wie gewünscht zu berechnen. – sunqiang

+2

@sunqiang: 'für Zeile in open()' kann (versuchen Sie) ziemlich lange "Zeilen" aus einer Binärdatei zurückgeben. Es ist wahrscheinlich eine gute Idee, 'block = f.read (BLOCKSIZE) zu verwenden; m.update (block) 'für vorhersehbare und sichere Speichernutzung. –

1

Wenn Sie nicht brauchen, Einweg Sicherheit, die Sie auch zlib.crc32 oder zlib.adler32 nutzen könnten, wie here dokumentiert.

+0

Es ist bemerkenswert, dass adler32 schneller als crc32 läuft, ist aber nicht so gut bei der Fehlererkennung wie crc32. Wenn die Anwendung ist, dass die Prüfsumme (Datei) Datei begleitet, sollte Adder32 nicht verwendet werden - es war ziemlich passend für seine Zielanwendung: Prüfsumme (UN-komprimierte Datei) begleitet komprimierte Datei. –