'In python, if extract a tar.gz file, how to get or set the name of the result file

My question is like: when use:

import tarfile
tar = tarfile.open("sample.tar.gz")
tar.extractall()
tar.close()

if the file before compress called "sampleFolder", after I doing the above steps, how to return the "sampleFolder" name, better with its full path, or how to set the result to other name like "Folder"?

it's not a good question, but I actually have demand on this in my project.

I have to edit the question to: if I don't know the "sampleFolder", can I get a return to it after the decompress step



Solution 1:[1]

It will be extracted to the working directory by default:

import os
os.getcwd()

So, the path to the extracted data is:

from pathlib import Path
extracted_to_path = Path.cwd() / 'sampleFolder'

To extract in a different location:

with tarfile.open('sample.tar.gz') as tar:
    tar.extractall(path='/other/folder')

edit: If you just want to know the name "sampleFolder" contained in the archive, it's not necessary to extract somewhere. You should use getnames:

tar.getnames()

Note that tarballs can have multiple files or folders within.

Solution 2:[2]

Python provides shutil library which can extract zip files.

import shutil
help(shutil.unpack_archive)

unpack_archive(filename, extract_dir=None, format=None) Unpack an archive.

`filename` is the name of the archive.

`extract_dir` is the name of the target directory, where the archive
is unpacked. If not provided, the current working directory is used.

`format` is the archive format: one of "zip", "tar", "gztar", "bztar",
or "xztar".  Or any other registered format.  If not provided,
unpack_archive will use the filename extension and see if an unpacker
was registered for that extension.

In case none is found, a ValueError is raised.
shutil.unpack_archive(filename="file_path", extract_dir="path_where_you_want_extracted_file", format="tar/zip")

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 bhargav3vedi