Как сравнить контрольные суммы в списке, соответствующем пути к файлу с путем к файлу в операционной системе в Python? - PullRequest
0 голосов
/ 26 мая 2010

как сравнить контрольные суммы в списке, соответствующем пути к файлу, с путем к файлу в операционной системе в Python?

import os,sys,libxml2

files=[]
sha1s=[]

doc = libxml2.parseFile('files.xml')
for path in doc.xpathEval('//File/Path'):
  files.append(path.content)
for sha1 in doc.xpathEval('//File/Hash'):
  sha1s.append(sha1.content)

for entry in zip(files,sha1s):
  print entry

файл files.xml содержит

<Files>
    <File>
        <Path>usr/share/doc/dialog/samples/form1</Path>
        <Type>doc</Type>
        <Size>1222</Size>
        <Uid>0</Uid>
        <Gid>0</Gid>
        <Mode>0755</Mode>
        <Hash>49744d73e8667d0e353923c0241891d46ebb9032</Hash>
    </File>
    <File>
        <Path>usr/share/doc/dialog/samples/form3</Path>
        <Type>doc</Type>
        <Size>1294</Size>
        <Uid>0</Uid>
        <Gid>0</Gid>
        <Mode>0755</Mode>
        <Hash>f30277f73e468232c59a526baf3a5ce49519b959</Hash>
    </File>
</Files>

Мне нужно сравнить контрольную сумму sha1 между тегами, соответствующими файлу, указанному между тегами, с тем же путем к файлу в базовой операционной системе.

1 Ответ

0 голосов
/ 30 мая 2010
import hashlib
import libxml2

doc = libxml2.parseFile('files.xml')
filePaths = ["/" + path.content for path in doc.xpathEval('//File/Path')]
xmlDigests = [hash.content for hash in doc.xpathEval('//File/Hash')]

for filePath, xmlDigest in zip(filePaths, xmlDigests):
    with open(filePath) as inFile:
        digester = hashlib.sha1()
        digester.update(inFile.read())
        fileDigest = digester.hexdigest()
        if xmlDigest != fileDigest:
            print "Mismatch for %s (XML: %s, FILESYSTEM: %s)" % (filePath,
                xmlDigest, fileDigest)
...