2010-05-25 4 views
0

파일 경로에 해당하는 목록의 체크섬을 운영 체제의 파일 경로와 비교하는 방법 Python의 경우?파일 경로에 해당하는 목록의 체크섬을 운영 체제의 파일 경로와 비교하는 방법 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 내가 기본 운영 체제에서 같은 파일 경로와 태그 사이에 지정된 파일에 해당하는 태그 사이에서 SHA1 체크섬을 비교해야

<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> 

이 포함되어 있습니다.

+0

어떤 비트로 문제가 있습니까? 디스크에있는 파일에 대한 SHA1을 생성하는 것 뿐입니 까? – mikej

+0

sha1sum 다음 코드를 사용하여 을 생성 할 수 있습니다. OS의 파일 sha1sum과 xml의 sha1sum을 비교해야합니다. – surab

답변

0
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) 
관련 문제