This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author mateja.and
Recipients mateja.and
Date 2021-06-02.15:09:05
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1622646545.23.0.614350359918.issue44289@roundup.psfhosted.org>
In-reply-to
Content
Since Python 3.9 tarfile.is_tarfile accepts not only paths but also files and file-like objects (bpo-29435).

Verification if a file or file-like object is a tar file modifies file object's current position.

Imagine a function listing names of all tar archive members but checking first if this is a valid tar archive. When its argument is a str or pathlib.Path this is quite straightforward. If the argument is a file of file-like object then current position must be reset or TarFile.getmembers() returns empty list.

import tarfile


def list_tar(archive):
    if tarfile.is_tarfile(archive):
        kwargs = {'fileobj' if hasattr(archive, 'read') else 'name': archive}
        t = tarfile.open(**kwargs)
        return [member.name for member in t.getmembers()]
    return []


if __name__ == '__main__':
    path = 'archive.tar.gz'
    print(list_tar(path))
    print(list_tar(open(path, 'rb')))


['spam.py', 'ham.py', 'bacon.py', 'eggs.py']
[]
History
Date User Action Args
2021-06-02 15:09:05mateja.andsetrecipients: + mateja.and
2021-06-02 15:09:05mateja.andsetmessageid: <1622646545.23.0.614350359918.issue44289@roundup.psfhosted.org>
2021-06-02 15:09:05mateja.andlinkissue44289 messages
2021-06-02 15:09:05mateja.andcreate