我的目标是解压一个
我的代码基于这个 问题,只不过我要解压的是一个 .tar.gz 文件,而不是一个 .zip 文件。
我提出这个问题是因为我得到的错误信息非常模糊,没有指明我的代码存在什么问题:
.tar.gz
文件,不包括其子目录。我的代码基于这个 问题,只不过我要解压的是一个 .tar.gz 文件,而不是一个 .zip 文件。
我提出这个问题是因为我得到的错误信息非常模糊,没有指明我的代码存在什么问题:
import os
import shutil
import tarfile
with tarfile.open('RTLog_20150425T152948.gz', 'r:gz') as tar:
for member in tar.getmembers():
filename = os.path.basename(member.name)
if not filename:
continue
# copy file (taken from zipfile's extract)
source = member
target = open(os.path.join(os.getcwd(), filename), "wb")
with source, target:
shutil.copyfileobj(source, target)
你可以看到,我复制了链接问题中的代码,并尝试将其更改为处理.tar.gz成员而不是.zip成员。运行代码时,我会得到以下错误:
Traceback (most recent call last):
File "C:\Users\dzhao\Desktop\123456\444444\blah.py", line 27, in <module>
with source, target:
AttributeError: __exit__
根据我所阅读的资料,shutil.copyfileobj
接受两个“类似文件”的对象作为输入。 member
是一个TarInfo
对象。我不确定TarInfo
对象是否是一个类似文件的对象,因此我尝试将这一行更改为:
source = member #to
source = open(os.path.join(os.getcwd(), member.name), 'rb')
但是这导致了一个错误,文件找不到。
我哪里理解有误了吗?
tar.fileobj
。有趣的是,当我在tar文档页面上使用ctrl+f时,它不是一个函数。因此,它必须是某个变量。但重要的是,tar.fileobj
是类似文件的对象,所以现在我的代码可以工作了=)谢谢! - Dzhao