当我用带有文件路径的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