2011-08-16 2 views
2
나는 그러나, zip 파일에 bsdiff 만든 패치 파일을

ZipFile를 파이썬 모듈 bytesize 차이

urllib.urlretrieve()

파일입니다 사용하여 내가 인터넷에서 검색된 ZipFile를 추출하는 파이썬에 대한 ZipFile를 모듈을 사용하고

파이썬에서 zip 파일의 압축을 풀고 bspatch를 사용하여 손상된 패치 파일을 사용하려고합니다. 필자가 7-zip을 사용하여 zip 파일을 수동으로 추출하면 패치 파일을 덮어 쓰고 잘 패치 한 패처를 실행합니다. 또한이 파일을 수동으로 덮어 쓰면 바이트 크기가 달라질 수 있습니다.

한 195 바이트해야하지만, 하나는 20,656 바이트해야한다, 196 바이트 만 20,781 바이트이고 하나는

코드 I (손상된 패치 메시지없이 패치 유일) 적당한 크기입니다 추출 할 수있어 사용하는 것은 :

z = zipfile.ZipFile('patchfiles.zip', 'r', zipfile.ZIP_DEFLATED) 
    z.printdir() 
    for info in z.infolist(): 
     if not os.path.isdir(patchdir): 
        os.mkdir(patchdir) 
     fname = info.filename 
     data = z.read(fname) 
     dest = os.path.join(patchdir, fname) 
     data = z.read(fname) 
     f = open(dest, 'w') 
     f.write(data) 
     f.close() 
    z.close() 

zip 파일 통상 공기를 빼다을 사용하여 압축되고, 심지어 방금 저장된 파일로 압축하는 최대 7zip과 함께 사용하여 시도 ZIP_STORED.

아이디어가 있으십니까?

+0

압축 파일의 URL을 게시 할 수 있습니까? –

+0

여기에 : http://m0rph3v5.com/patchfiles.zip – M0rph3v5

+0

우분투 상자에서 코드를 실행할 때, 출력 파일의 크기가 정확합니다. –

답변

5

Windows 버전인가요? 어쩌면 시도하십시오 f = open(dest, 'wb')

Windows에서만, b은 파일 시스템이 파일을 일반 텍스트가 아닌 2 진 파일로 취급하고 줄 끝은 엉망이 아닙니다. 다른 시스템에서는 아무런 차이가 없습니다 (그리고 b는 자동으로 무시됩니다).

+0

+1 : 좋습니다! –

+0

나는 실제로 창문에있다, 건배 :) – M0rph3v5