bz2 압축 된 tar 파일을 다운로드하고 tarfile.TarFile
개체를 만들려고합니다.bz2 데이터가있는 Python TarFile
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'
워드 프로세서에 따르면 (http://docs.python.org/library/tarfile.html#tarfile.open) 당신은 파일 name=
에 찬성 사용 fileobj=
를 사용하는 경우. 그것은 여전히 null 파일에 액세스하려고하는 것처럼 보입니까?
fileobj가 지정되면 파일 객체 이 (가) 열린 이름 대신 사용됩니다.
>>> 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.open()
를 사용하지 않고 내가 BZ2 데이터 압축을 풀고tarfile.Tarfile
객체가 수동으로이StringIO
및fileobj
와 함께 작동 만들 경우 위치 0
에 있어야하는데 tarfile
이 bz2 압축을 지원한다고 가정하기 때문에 합리화를 시도합니다.
2.6에서이 구문을 사용할 수 있습니까? – agf
예, 완벽하게 작동합니다 (MyModule을 제거한 후). – glglgl