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

the*_*tor 52 python tar

当我调用add()一个上tarfile有一个文件路径对象,该文件被添加到与目录层次结构关联的压缩包.换句话说,如果我解压缩tarfile,则会再现原始目录层次结构中的目录.

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

dia*_*neo 66

TarFile.add()方法的arch参数是匹配目标的另一种方便方法.

示例:您希望将dir 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()
Run Code Online (Sandbox Code Playgroud)

  • `arcname ="a.git"` 将在存档内创建一个文件夹 `a.git`。您可以使用 `arcname =""` 将文件归档到 `repo/a.git` 目录中,而无需创建文件夹。 (7认同)
  • 比接受的答案恕我直言更简单 (4认同)

Wim*_*Wim 44

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

这段代码应添加/path/to/filename到TAR文件中,但会将其解压缩为myfilename:

tar.addfile(tarfile.TarInfo("myfilename.txt"), open("/path/to/filename.txt"))
Run Code Online (Sandbox Code Playgroud)

  • 此外,它也适用于`tar.add()`!要添加整个树,但使用不同的名称,只需执行:`tar.add('/ path/to/dir/to/add /',arcname ='newdirname')`然后tarfile将包含一个名为的目录'newdirname',并且所有内容都未被触及. (34认同)
  • 如果你想保存没有所有目录结构的文件.做`arcname ='.'` (10认同)
  • 由于我的计算机中的某些原因,这只会创建具有空文件的tar存档(文件在那里,但为空)。 (3认同)
  • 当我尝试解压缩并提取内容时,使用 `arcname='.'` 给了我一个 `IsADirectoryError` 。不过,使用下面 @diabloneo 的答案是有效的。 (2认同)

小智 6

也许你可以使用tarFile.add(name,arcname)的"arcname"参数.它需要文件在存档中具有的备用名称.