## The Python Imaging Library.# $Id$## read files from within a tar file## History:# 95-06-18 fl Created# 96-05-28 fl Open files in binary mode## Copyright (c) Secret Labs AB 1997.# Copyright (c) Fredrik Lundh 1995-96.## See the README file for information on usage and redistribution.#from__future__importannotationsimportiofrom.importContainerIO
[docs]classTarIO(ContainerIO.ContainerIO[bytes]):"""A file object that provides read access to a given member of a TAR file."""def__init__(self,tarfile:str,file:str)->None:""" Create file object. :param tarfile: Name of TAR file. :param file: Name of member file. """self.fh=open(tarfile,"rb")whileTrue:s=self.fh.read(512)iflen(s)!=512:msg="unexpected end of tar file"raiseOSError(msg)name=s[:100].decode("utf-8")i=name.find("\0")ifi==0:msg="cannot find subfile"raiseOSError(msg)ifi>0:name=name[:i]size=int(s[124:135],8)iffile==name:breakself.fh.seek((size+511)&(~511),io.SEEK_CUR)# Open regionsuper().__init__(self.fh,self.fh.tell(),size)