MCPcopy Create free account
hub / github.com/RT-Thread/env-windows / extractfile

Method extractfile

tools/python-3.11.9-amd64/Lib/tarfile.py:2355–2385  ·  view source on GitHub ↗

Extract a member from the archive as a file object. `member' may be a filename or a TarInfo object. If `member' is a regular file or a link, an io.BufferedReader object is returned. For all other existing members, None is returned. If `member' does not appear

(self, member)

Source from the content-addressed store, hash-verified

2353 self._dbg(1, "tarfile: %s %s" % (type(e).__name__, e))
2354
2355 def extractfile(self, member):
2356 """Extract a member from the archive as a file object. `member' may be
2357 a filename or a TarInfo object. If `member' is a regular file or
2358 a link, an io.BufferedReader object is returned. For all other
2359 existing members, None is returned. If `member' does not appear
2360 in the archive, KeyError is raised.
2361 """
2362 self._check("r")
2363
2364 if isinstance(member, str):
2365 tarinfo = self.getmember(member)
2366 else:
2367 tarinfo = member
2368
2369 if tarinfo.isreg() or tarinfo.type not in SUPPORTED_TYPES:
2370 # Members with unknown types are treated as regular files.
2371 return self.fileobject(self, tarinfo)
2372
2373 elif tarinfo.islnk() or tarinfo.issym():
2374 if isinstance(self.fileobj, _Stream):
2375 # A small but ugly workaround for the case that someone tries
2376 # to extract a (sym)link as a file-object from a non-seekable
2377 # stream of tar blocks.
2378 raise StreamError("cannot extract (sym)link as file object")
2379 else:
2380 # A (sym)link's file object is its target's file object.
2381 return self.extractfile(self._find_link_target(tarinfo))
2382 else:
2383 # If there's no data associated with the member (directory, chrdev,
2384 # blkdev, etc.), return None instead of a file object.
2385 return None
2386
2387 def _extract_member(self, tarinfo, targetpath, set_attrs=True,
2388 numeric_owner=False):

Callers 1

untar_fileFunction · 0.80

Calls 7

_checkMethod · 0.95
getmemberMethod · 0.95
_find_link_targetMethod · 0.95
StreamErrorClass · 0.85
isregMethod · 0.80
islnkMethod · 0.80
issymMethod · 0.80

Tested by

no test coverage detected