1

元の形式を維持しようとして、tarball を処理して新しいものを出力することになっている Python スクリプトに取り組んでいます。したがって、開いているtarballで使用されている圧縮方法を検索して、同じ圧縮で新しいtarballを開く方法を探しています。

AFAICSTarFileクラスは、必要な情報を直接取得するためのパブリック インターフェイスを提供しません。また、tarfile モジュールとは別にファイルを読み取ることは避けたいと思います。

現在、基になるファイル オブジェクト ( t.fileobj.__class__) のクラスを検索するか、可能なすべてのモードで入力ファイルを開いて、成功する形式に基づいて正しい形式を選択することを検討しています。

4

3 に答える 3

2

わかりました、より良い解決策を見つけました。

f = t.fileobj.__class__(newfn, 'w')
于 2010-02-12T21:23:02.290 に答える
1

tarfile を開くと、モードを選択できます。ドキュメントから:

モードが特定の (圧縮された) ファイルを読み取り用に開くのに適していない場合、 ReadError が発生します。

それでは、毎回例外をキャッチして、ファイルを など.gzとして開いてみませんか? .bz2例外なく開くものは、複製する圧縮のタイプを示します。

于 2010-02-12T18:28:38.140 に答える
1

Tar doesn't compress, it concatenates (which is why TarFile won't tell you what compression method is used, because there isn't one).

Are you trying to find out if it's a tar.gz, tar.bz2, or tar.Z ?

于 2010-02-12T18:15:09.610 に答える