2

私はpython用のzipfileモジュールを使用して、インターネットから取得したzipfileを抽出しています

urllib.urlretrieve()

zip ファイル内のファイルは bsdiff によって作成されたパッチ ファイルですが、python で zip ファイルを抽出して bspatch を使用しようとすると、破損したパッチ ファイルと表示されます。7-zip を使用して zip ファイルを手動で抽出すると、パッチ ファイルが上書きされ、パッチャーが正常にパッチされます。これらのファイルを手動で上書きすると、バイトサイズが異なることにも気付きました。

1 つは 195 バイトである必要がありますが 196 バイト、もう 1 つは 20656 バイトである必要がありますが 20781 バイトであり、もう 1 つは適切なサイズです (これは、破損したパッチ メッセージなしでパッチを適用する唯一のものです)。

抽出に使用しているコードは次のとおりです。

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 ファイルは通常の Deflate を使用して圧縮されています。保存されたファイルとして圧縮するだけで、7zip で ZIP_STORED を使用してみました。

何か案は?

4

1 に答える 1

5

これはWindows上ですか?たぶん試してみてくださいf = open(dest, 'wb')

Windows のみで、bファイルシステムがファイルをプレーンテキストではなくバイナリとして扱い、行末を台無しにしないようにします。他のシステムでは、違いはありません (そしてbは黙って無視されます)。

于 2011-08-16T18:05:40.430 に答える