当前位置: 首页 > 知识库问答 >
问题:

访问.tar文件中的.tar

漆雕宏浚
2023-03-14

我有一个tar存档,其中包含一些其他tar存档。下面的示例完美地提取了primary.tar文件,但我在访问其中的其他.tar文件时遇到了问题。

import tarfile
import os

fd = tarfile.open('test.tar')
for member in fd.getmembers():
    if not member.isfile():
        continue

    cfile = fd.extractfile(member)
    name = cfile.name
    filename, file_extension = os.path.splitext(name)
    #print filename + "----" + file_extension

    if file_extension == ".tar":
        print cfile
    #print cfile.read()
    print cfile.name
    cfile.close()
fd.close()

这将返回以下内容:

file1.txt
file2.txt
<tarfile.ExFileObject object at 0x101989690>
tar1.tar

所以我可以访问tar1.tar文件对象。但是,我无法弄清楚如何从tar1.tar中获取成员或内容。

共有1个答案

郑桐
2023-03-14

cfile作为fileobj参数传递给对tarfile.open()的新调用。

import tarfile
import os

def list_contents(name, fileobj=None, prefix=''):
    fd = tarfile.open(name, fileobj=fileobj)
    for member in fd.getmembers():
        if not member.isfile():
            continue
        cfile = fd.extractfile(member)
        name = cfile.name
        filename, file_extension = os.path.splitext(name)
        print prefix + cfile.name
        if file_extension == '.tar':
            list_contents(name, cfile, prefix+'    ')
        cfile.close()
    fd.close

list_contents('x.tar')

测试:

$ touch a b c x y z
$ tar cf y.tar x y z
$ tar cf x.tar a b y.tar c
$ python t.py
a
b
y.tar
    x
    y
    z
c
 类似资料:
  • 问题内容: 搜寻了几个小时后,就开始对此完全取笑。我还在网站上看到了该问题的各种变体,但似乎无法使其正常工作。JFrame需要从ini文件中读取数据,并且我已经创建了一种打开该文件的方法。所述文件存储在jar文件内称为资源的文件夹中。 当我在编译后运行代码时,这当然可以完美地工作,但是在导出到.jar文件后会引发异常。我已经研究过使用InputStream,FileInputStream,但似乎找

  • 我很难理解为什么在从tar文件中提取文件后无法打开它们。当我试图打开或读取刚刚从tar中提取的文件内容时,我会收到一条“访问被拒绝”错误消息。我正要在StackOverflow上发布这个问题,这时我终于发现我做错了什么。我想我会把这个问题和答案张贴给将来需要它的人。简单的解决方案是只使用Perl Tar以外的东西,但是。。。 ~~~问题~ ~~ 提取tar文件的内容。如果您在尝试打开或读取刚刚从t

  • 问题内容: 我需要能够访问存储在已编译jar文件中的文件。我已经弄清楚了如何将文件添加到项目中,但是如何在代码中引用它呢?如何将文件从jar文件复制到用户硬盘驱动器上的某个位置?我知道有很多方法可以访问文件(FileInputStream,FileReader等),但是我不知道如何查看自身。 问题答案: 您可以使用如下形式: 如果foo.txt位于JAR文件的根目录中,则可以使用: 我相信,假设该

  • 我有一个.tar文件,其中包含文件夹中的许多.gz文件。这些 gz 文件中的每一个都包含一个.txt文件。与此问题相关的其他堆栈溢出问题旨在提取文件。 我试图反复阅读每一个的内容。txt文件,因为。焦油很大。 首先我阅读了. tar文件的内容: 或在Unix中: 然后我尝试使用tarfile提取文件方法,但我得到一个错误:“模块'tarfile'没有属性'提取文件'”。此外,我甚至不确定这是正确的

  • 我的GCP云存储桶中有很多.tar文件。每个.tar文件都有多个图层。我想使用GCP数据流解压缩这些.tar文件,并将它们放回另一个GCP存储桶中。 我找到了Google提供的用于批量解压缩云存储文件的实用工具模板,但它不支持.tar文件扩展名。 也许我应该在上传到云端之前尝试解压文件,或者Beam中是否存在其他内容? 每个tar文件未经压缩大约有15 TB。

  • 我正在从主类访问资源文件夹中的文件 我收到了这个错误: 我甚至打开了jar文件,remoteUnitsIdsInOldServer.txt文件就在那里,在类内部