0

extractall()Python v2.4には存在しないtarfileモジュールからPython v2.4でtarfileを抽出するための代替アプローチを提案できますか?

4

2 に答える 2

2

tarfileモジュールPython 2.4 に存在します。

http://docs.python.org/release/2.4/lib/module-tarfile.html

モジュールのドキュメントから引用:

バージョン 2.3 の新機能。

これは純粋な Python モジュールであるため、インストールを妨げる可能性のある C ライブラリの依存関係はありません。

TarFile.extractall()関数は簡単にバックポートされます。

import copy
import operator
import os.path
from tarfile import ExtractError

def extractall(tfile, path=".", members=None):
    directories = []

    if members is None:
        members = tfile

    for tarinfo in members:
        if tarinfo.isdir():
            # Extract directories with a safe mode.
            directories.append(tarinfo)
            tarinfo = copy.copy(tarinfo)
            tarinfo.mode = 0700
        tfile.extract(tarinfo, path)

    # Reverse sort directories.
    directories.sort(key=operator.attrgetter('name'))
    directories.reverse()

    # Set correct owner, mtime and filemode on directories.
    for tarinfo in directories:
        dirpath = os.path.join(path, tarinfo.name)
        try:
            tfile.chown(tarinfo, dirpath)
            tfile.utime(tarinfo, dirpath)
            tfile.chmod(tarinfo, dirpath)
        except ExtractError, e:
            if tfile.errorlevel > 1:
                raise
            else:
                tfile._dbg(1, "tarfile: %s" % e)
于 2013-06-28T09:39:19.293 に答える
0

申し訳ありませんが、簡単に確認すると、バージョン 2.5 の新機能であることがわかります。エクストラに対して。

あなたはしなければならない:

import tarfile

tf = tarfile.TarFile("YourTarFile.tar")
members = tf.getmembers()
for member in members:
    where_to_put_it = "*somthing based on the member path probably!*"
    print 'Extracting', member
    tf.extract(member, where_to_put_it)
于 2013-06-28T09:46:24.697 に答える