2014-01-15 66 views
1

我正在寻找一种方法来压缩没有目录的tar.gz中的tar文件。如何压缩没有目录的tar.gz中的tar文件?

今天我的代码生成一个TAR文件,没有“tarfile”库和arcname参数的目录,但是当我想在TAR.GZ中压缩这个TAR文件时,我不明白如何删除目录。

我在过去的3天里做了很多测试。

我的代码:

Tarname = example.tar 
ImageDirectory = C:\... 
TarDirectory = C:\.. 

tar = tarfile.open(Tarname, "w") 
tar.add(ImageDirectory,arcname=TarName) 
tar.close() 

targz = tarfile.open("example.tar.gz", "w:gz") 
targz.add(TarDirectory, arcname=TarName) 
targz.close() 
+0

我不明白的问题。你得到了什么,而你想获得什么呢?请注意,'arcname'不是指存档的名称,而是指在tar文件中添加的条目的名称。你为什么要制作'example.tar',然后是'example.tar.gz'?这只会产生两个不同的文件。 –

+0

Hello Mark,我尝试将tif和txt文件分组到TAR文件中,然后将其压缩到tar.gz文件中。对于所有文件,我不想保留原始目录。我理解吗? – syl3198045

+0

最后,我想要一个TARGZ \ TAR \ TIF目录,但我的文件不在我用来工作的同一个目录中,并且我被迫传递保留在我最终档案中的文件目录... – syl3198045

回答

0

尝试使用gzip的模块: 这里是如何使用它的例子:

import gzip 
f_in = open('file.txt', 'rb') 
f_out = gzip.open('file.txt.gz', 'wb') 
f_out.writelines(f_in) 
f_out.close() 
f_in.close() 
+0

是的,我尝试过之前但是相同的结果。该目录永远在最后的tar.gz中。 gzip中没有arcname? – syl3198045

+0

在编写tar文件时,他已经使用'“w:gz”',所以他不需要gzip模块。 –

3

对于个人文件(S)

tar.add(file, arcname=os.path.basename(file)) 

为每个要添加的文件。 basename将删除目录信息。

或者,递归目录

def flatten(tarinfo): 
    tarinfo.name = os.path.basename(tarinfo.name) 
    return tarinfo 

tar = tarfile.open("example.tar.gz", "w:gz") 
tar.add("directory", filter=flatten) 
tar.close() 
+0

谢谢,basename不起作用,但对于你的第二个命题什么是“名称”,当tarinfo是tarfile库的函数,当它是一个变量(例如TarInfo和tarinfo)时,你能够精确地确定它的名字吗? – syl3198045

+0

您是否导入os.path '为'basename'? –

+0

您可以阅读'tarinfo'和'tarinfo.name'的[documentation](http://docs.python.org/2/library/tarfile.html)。 –

相关问题