ディレクトリ階層を追加せずに、どのようにファイルをPythonでTarfileに追加できますか?

StackOverflow https://stackoverflow.com/questions/2239655

  •  19-09-2019
  •  | 
  •  

質問

呼び出すとき add() aで tarfile ファイルパスを備えたオブジェクトは、ディレクトリ階層が関連付けられているタルボールにファイルが追加されます。言い換えれば、Tarfileを解凍すると、元のディレクトリの階層のディレクトリが再現されます。

結果のターボールを削除するディレクトリ情報なしで単純なファイルを単に追加する方法はありますか?

役に立ちましたか?

解決

使用できます tarfile.addfile(), 、 の中に TarInfo 最初のパラメーターであるオブジェクトは、 name これは、追加するファイルとは異なります。

このコードは追加する必要があります /path/to/filename タールファイルに抽出します myfilename:

tar.addfile(tarfile.TarInfo("myfilename.txt"), open("/path/to/filename.txt"))

他のヒント

アーチ tarfile.add()メソッドの引数は、目的地に一致する代替で便利な方法です。

例:監督をアーカイブしたい repo/a.git/tar.gz ファイルですが、アーカイブのツリールートが始まります。 a.git/ だがしかし repo/a.git/, 、あなたは次のようにすることができます:

archive = tarfile.open("a.git.tar.gz", "w|gz")
archive.add("repo/a.git", arcname="a.git")
archive.close()

たぶん、Tarfile.Add(name、arcname)に「arcname」引数を使用できます。ファイルにアーカイブ内にある代替名が必要です。

@diabloneoに感謝します。

def compress(output_file="archive.tar.gz", output_dir='', root_dir='.', items=[]):
    """compress dirs.

    KWArgs
    ------
    output_file : str, default ="archive.tar.gz"
    output_dir : str, default = ''
        absolute path to output
    root_dir='.',
        absolute path to input root dir
    items : list
        list of dirs/items relative to root dir

    """
    os.chdir(root_dir)
    with tarfile.open(os.path.join(output_dir, output_file), "w:gz") as tar:
        for item in items:
            tar.add(item, arcname=item)    


>>>root_dir = "/abs/pth/to/dir/"
>>>compress(output_file="archive.tar.gz", output_dir=root_dir, 
            root_dir=root_dir, items=["logs", "output"])
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top