如何在不添加目录层次的情况下将文件添加到使用Python的tar文件中?

当我用带有文件path的tarfile对象调用add()时,该文件被添加到与目录层次关联的tarball中。 换句话说,如果我解压tarfile,那么原始目录层次结构中的目录就会被复制。

有没有简单地添加一个纯文件没有目录信息的方式,解压缩生成的tarball产生一个平面的文件列表?

您可以在TarInfo对象中使用tarfile.addfile() ,这是第一个参数,您可以指定一个与您要添加的文件不同的name

这段代码应该为TAR文件添加/path/to/filename ,但是会将其解压为myfilename

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

TarFile.add()方法的参数arch是一个替代方便的方法来匹配您的目的地。

例如:你想把一个目录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”参数。 它需要一个替代名称,该文件将在档案中。