2009-07-09 5 views
1

Je souhaite générer et stocker une valeur CRC (ou similaire) pour une liste donnée de fichiers pouvant servir de comparaison ultérieurement. L'écriture d'une fonction pour ce faire est assez simple, mais existe-t-il une façon plus standard de le faire dans les bibliothèques Python?Données/fichier Python Crc

La valeur générée n'a pas besoin d'être d'une norme particulière.

Répondre

5

recommandent hashlib, il implémente une interface commune à de nombreux algorithmes de hachage sécurisé et de résumé de message. Sont inclus les algorithmes de hachage sécurisé FIPS SHA1 et MD5. un code de démonstration:

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

Un simple hashlib.md5 (mon_fichier.read())? – kjfletch

+1

@kjfletch, j'ai mis à jour la réponse avec un code démo simple, il met à jour md5 ligne par ligne pour faciliter le chargement du système, et vous pouvez utiliser cette fonction avec os.walk (http://docs.python.org/library/ os.html # os.walk a un exemple) pour calculer le md5 de chaque fichier comme vous voulez. – sunqiang

+2

@sunqiang: 'pour line dans open()' peut (tenter de) renvoyer des "lignes" plutôt longues à partir d'un fichier binaire. C'est probablement une bonne idée d'utiliser 'block = f.read (BLOCKSIZE); m.update (block) 'pour une utilisation de la mémoire prévisible et sûre. –

1

Si vous n'avez pas besoin de sécurité d'une façon, vous pouvez également utiliser zlib.crc32 ou zlib.adler32, comme documenté here.

+0

Il est à noter que adler32 fonctionne plus vite que crc32 mais n'est pas aussi bon à la détection d'erreur que crc32. Si l'application est cette somme de contrôle (fichier) accompagne le fichier, adler32 ne devrait pas être utilisé - il était tout à fait approprié pour son application ciblée: somme de contrôle (fichier UNcompressed) accompagne le fichier compressé. –