首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有TarFile数据的Python

带有TarFile数据的Python
EN

Stack Overflow用户
提问于 2011-08-30 20:24:11
回答 1查看 746关注 0票数 2

我试图下载一个bz2压缩的tarfile并从它创建一个tarfile.TarFile对象。

代码语言:javascript
复制
import MyModule

import StringIO
import tarfile

tardata = StringIO.StringIO()
tardata.write(MyModule.getBz2TarFileData())
tardata.seek(0)

tar = tarfile.open(fileobj = tardata, mode="r:bz2")
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "/usr/lib/python2.4/tarfile.py", line 896, in open
    return func(name, filemode, fileobj)
  File "/usr/lib/python2.4/tarfile.py", line 987, in bz2open
    pre, ext = os.path.splitext(name)
  File "/usr/lib/python2.4/posixpath.py", line 92, in splitext
    i = p.rfind('.')
AttributeError: 'NoneType' object has no attribute 'rfind'

根据docs (http://docs.python.org/library/tarfile.html#tarfile.open),当您使用fileobj=时,它被用于文件name=。但是,它看起来仍然试图访问一个空文件吗?

如果指定了fileobj,则将其用作为名称打开的文件对象的替代。它应该在0位置。

如果我不使用tarfile.open(),并且我解压缩bz2数据并手动创建tarfile.Tarfile对象,那么它将与StringIOfileobj一起工作

代码语言:javascript
复制
>>> import MyModule
>>> import tarfile
>>> import StringIO
>>> import bz2
>>> tardata = StringIO.StringIO()
>>> tardata.write(bz2.decompress(MyModule.getBz2TarFileData()))
>>> tardata.seek(0)
>>> tar = tarfile.TarFile(fileobj=tardata, mode='r')
>>> tar.getmembers()
[<TarInfo 'FileNumber1' at -0x48e150f4>, <TarInfo 'FileNumber2' at -0x48e150d4>, <TarInfo 'FileNumber3' at -0x48e11fb4>]
>>> 

我试图精简,因为tarfile应该支持bz2压缩。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-30 23:25:02

我只是在我的系统上看了一下tarfile.py。线路号码有很大的不同(我有2.6),所以我认为从2.4开始就有繁重的工作要做。

可能该模块在2.4次中出现了错误,已经更正,或者该接口已经更改,因此docs不再与您的模块版本匹配。

不过,这只是猜测而已。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7249341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档