[3.14] gh-86608: Improve and restructure tarfile examples (GH-121771) (#136866)

gh-86608: Improve and restructure tarfile examples (GH-121771)

Add an example on how to write a tarfile to stdout; general improvements.
(cherry picked from commit cc81b4e501138b5793d419c81c3a2859a17207a7)

Co-authored-by: Dominic H <dom@dominic.sk>
Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
This commit is contained in:
Miss Islington (bot) 2025-07-20 15:16:19 +02:00 committed by GitHub
parent c537b98e48
commit 2caae152b9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1353,6 +1353,9 @@ Command-line options
Examples
--------
Reading examples
~~~~~~~~~~~~~~~~~~~
How to extract an entire tar archive to the current working directory::
import tarfile
@ -1375,6 +1378,23 @@ a generator function instead of a list::
tar.extractall(members=py_files(tar))
tar.close()
How to read a gzip compressed tar archive and display some member information::
import tarfile
tar = tarfile.open("sample.tar.gz", "r:gz")
for tarinfo in tar:
print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
if tarinfo.isreg():
print("a regular file.")
elif tarinfo.isdir():
print("a directory.")
else:
print("something else.")
tar.close()
Writing examples
~~~~~~~~~~~~~~~~
How to create an uncompressed tar archive from a list of filenames::
import tarfile
@ -1390,19 +1410,15 @@ The same example using the :keyword:`with` statement::
for name in ["foo", "bar", "quux"]:
tar.add(name)
How to read a gzip compressed tar archive and display some member information::
How to create and write an archive to stdout using
:data:`sys.stdout.buffer <sys.stdout>` in the *fileobj* parameter
in :meth:`TarFile.add`::
import tarfile
tar = tarfile.open("sample.tar.gz", "r:gz")
for tarinfo in tar:
print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
if tarinfo.isreg():
print("a regular file.")
elif tarinfo.isdir():
print("a directory.")
else:
print("something else.")
tar.close()
import sys
import tarfile
with tarfile.open("sample.tar.gz", "w|gz", fileobj=sys.stdout.buffer) as tar:
for name in ["foo", "bar", "quux"]:
tar.add(name)
How to create an archive and reset the user information using the *filter*
parameter in :meth:`TarFile.add`::