python - Python 3:从 tar.gz 存档中提取文件
问题描述
我目前正在使用Semantically Enriched Wikipedia。
该资源位于 7.5 GB 的tar.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 char,但我现在看到每个文件都有它)。
所以我计划使用一些 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 分钟后,我只能处理 500MB 的 100 GB。
解决方案
我建议您使用 7zip 进行提取。您可以从 python 启动 7zip 提取,然后在并行提取时,您可以读取提取的文件。这将节省相当多的时间。您可以实现使用线程。
其次,在给出 Windows 路径时不要使用正斜杠。您可以使用\\
./
推荐阅读
- masstransit - MassTransit 发送到现有交易所
- python-3.x - 使用 pandas 处理 Excel 文件时出现错误消息“Traceback(最近一次调用最后一次)”
- tensorflow - 无法使用 tf.decode_csv() 正确读取一个数组 csv 文件
- javascript - 模块没有导出成员,“请求”
- javascript - Moment .JS - 为什么差异不是全年格式
- javascript - 如何在 Javascript 中使用 ASP 变量?
- ios - 后台任务在持有 WebKit ProcessAssertion 时过期
- c# - 如何在其外部的 WPF 表单内调用函数
- maven - rtMavenDeployer 怎么添加属性?
- javascript - AWS s3 重定向到另一个 s3 存储桶