1

完全なパス「/home/usr/path/to/file」を持つファイルを含む「tafile」があります。ファイルを現在のフォルダーに抽出すると、完全なパスが再帰的に作成されます。ベース名のみでファイルを抽出する方法はありますか。

4

3 に答える 3

4

から取得したオブジェクトをarcnamesハッキングすることで、 を変更できます。次に、 を使用して、選択した宛先に新しい名前でメンバーを書き込むことができます。TarInfoTarfile.getmembers()Tarfile.extractall

たとえば、次の関数は、アーカイブの任意のサブツリーからメンバーを選択し、それらのベース名で宛先に抽出します。

def extractTo(tar, dest, selector):
    if type(selector) is str:
        prefix = selector
        selector = lambda m: m.name.startswith(prefix)
    members = [m for m in tar.getmembers() if selector(m)]
    for m in members:
        m.name = os.path.basename(m.name)
    tar.extractall(path = dest, members = members)

がディレクトリ内のいくつかのメンバーを持つアーカイブを表すインスタンスであり、それらtarのメンバーをディレクトリに折りたたみたいとします。あなたがすることができます:TarFileutilities/misclocal/bin

extractTo(tar, 'local/bin', 'utilities/misc/')

/ディレクトリプレフィックスの末尾に注意してください。miscディレクトリを「local/bin」に追加するのではなく、そのメンバーだけを追加します。

于 2013-03-02T05:59:15.457 に答える
3

それを使用TarFile.extractfile()して、選択したファイルに書き込みます。

于 2011-05-27T08:07:43.227 に答える
0

ニーズに合わせて機能extractallを使用できます。ドキュメントによると、アーカイブからすべてのメンバーを現在の作業ディレクトリまたはディレクトリ パスに抽出します

TarFile.extractall(path="my/path")
于 2011-05-27T08:09:27.433 に答える