當我用帶有文件路徑的tarfile
對象調用add()
時,該文件被添加到與目錄層次關聯的tarball中。換句話說,如果我解壓縮tarfile,原始目錄層次結構中的目錄將被重現。如何在不添加目錄層次的情況下將文件添加到使用Python的tar文件中?
有沒有一種方法可以簡單地添加一個沒有目錄信息的純文件,解壓生成的tarball會生成一個平面文件列表?
當我用帶有文件路徑的tarfile
對象調用add()
時,該文件被添加到與目錄層次關聯的tarball中。換句話說,如果我解壓縮tarfile,原始目錄層次結構中的目錄將被重現。如何在不添加目錄層次的情況下將文件添加到使用Python的tar文件中?
有沒有一種方法可以簡單地添加一個沒有目錄信息的純文件,解壓生成的tarball會生成一個平面文件列表?
您可以在TarInfo
對象中使用tarfile.addfile()
,這是第一個參數,您可以指定與您要添加的文件不同的name
。
這段代碼應該添加/path/to/filename
到TAR文件,但將其解壓爲myfilename
:
tar.addfile(tarfile.TarInfo("myfilename.txt"), open("/path/to/filename.txt"))
也許你可以使用「arcname」參數TarFile.add(姓名,arcname)。它需要一個替代名稱,該文件將存在於檔案中。
arch參數的TarFile.add()方法是一種替代方便的方法來匹配您的目的地。
例如:你想一個目錄回購/ a.git/存檔到的tar.gz文件,但您更希望樹根在存檔通過a.git/但不開始回購/ a.git/,你可以這樣做如下:
archive = tarfile.open("a.git.tar.gz", "w|gz")
archive.add("repo/a.git", arcname="a.git")
archive.close()
比接受的答案更簡單恕我直言 – 2015-10-27 10:17:37
這是一種更好的方法,因爲如果您嘗試添加目錄,則接受的答案將不起作用。 – 2016-06-08 09:59:08
此外,它也適用於'tar.add()'!要添加整個樹,但使用不同的名稱,只需執行:tar.add('/ path/to/dir/to/add /',arcname ='newdirname')',然後tar文件將包含一個具有named 'newdirname',並且它的所有內容都是不變的。 – 2010-10-31 01:22:45
並且如果你想保存沒有所有目錄結構的文件。做'arcname ='。'' – 2016-06-20 18:01:16
什麼是這個文件()函數?如何導入它? – 2017-06-14 12:06:49