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

Go through tar archive in memory to extract metadata?

我有几个 tar 存档需要 extract/read 在内存中。问题是每个 tar 包含许多 ZIP 档案,每个都包含唯一的 XML 文档。

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

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

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

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

对于每个 tar 个存档:

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

对于 tar 存档中的每个 zip:

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

对于 zip 中的每个 XML 文件:

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