通过内存中的tar存档来提取元数据?

时间:2015-06-10 17:10:14

标签: python zip tar

我需要在内存中提取/读取多个tar档案。问题是每个tar包含许多ZIP存档,每个包含唯一的XML文档。

所以每个tar的结构如下:tar - > directories-> ZIPs-> XML

显然我可以手动提取单个TAR,但我有大约1000个TAR存档,每个存档大约3 GB,每个包含大约6000个ZIP存档。我正在寻找一种方法来处理内存中的.tar存档并提取每个ZIP的XML数据。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

这应该是可行的,因为所有相关方法都有非磁盘相关的选项。

这里有很多循环,所以让我们深入挖掘。

对于每个tar存档:

  • tarfile.open将打开tar存档。 (Docs
  • 在生成的.getmembers实例上调用TarFile以获取存档中包含的zip文件(或其他文件)列表。 (Docs

对于tar档案中的每个zip:

  • 一旦您知道要查看的成员文件(即您的一个拉链),请在.extractfile实例上调用TarFile以获取该zip文件的文件对象。 (Docs
  • 使用您的文件对象实例化新zipfile.ZipFile以打开zip,以便您可以使用它。 (Docs
  • .infolist实例上调用ZipFile以获取其包含的文件列表(包括您的XML文件)。 (Docs

对于zip中的每个XML文件:

  • .open实例上调用ZipFile,以获取其中一个XML文件的文件对象。 (Docs
  • 您现在拥有一个与您的某个XML文件对应的文件对象。用它做任何你想做的事:.read它,把它复制到某个地方的磁盘上,贴在ElementTreedocs)等等。