Python3:从tar.gz归档文件中提取文件

2024-05-16 23:33:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在与Semantically Enriched Wikipedia合作

该资源位于7.5 GBtar.gz归档文件中,其中的每个文件都是XML,其模式为:

<text>
       Plain text
</text>

<annotation>
       Annotation for plain text
</annotation>

当前的任务是提取每个文件,然后解析标记中的内容

我做的第一件事是使用tarfile模块及其extractall()方法,但在提取过程中我遇到了以下错误:

OSError: [Errno 22] Invalid argument: '.\\sew_conservative\\wiki384\\Live_%3F%21*%40_Like_a_Suicide.xml'

虽然它的一部分被正确提取(我认为错误是由于xml文件名中的unicode字符造成的,但我现在看到每个文件都有它)

因此,我计划使用API的一些方法和下面的代码处理归档文件中的每个文件

不幸的是,封装每个文件的TarInfo对象不允许访问文件内容,并且逐个文件的提取需要花费太多时间

def parse_sew():
    sew_path = Path("C:/Users/beppe/Desktop/Tesi/Semantically Enriched Wikipedia/sew_conservative.tar.gz")
    with tarfile.open(sew_path, mode='r') as t:
        for item in t:
           // extraction

解析和使用XML文件的内容时必须进行提取,还是可以读取归档内容(动态读取,不提取任何内容),然后解析内容

更新:我正在通过tar-xvzf filename.tar.gz命令提取文件,一切都很顺利,但15分钟后我只能处理100GB中的500MB


Tags: 文件方法text内容for错误tarannotation
2条回答

我建议您使用7zip进行提取。您可以从python中启动7zip提取,然后当它并排提取时,您可以读取提取的文件。这将节省相当多的时间。您可以使用线程来实现

其次,在给出windows路径时不要使用前斜杠。您可以使用\\代替/

您还可以按如下方式尝试使用shutil

shutil.unpack_archive('path_to_your_archive', 'path_to_extract')

相关问题 更多 >