Вы можете использовать модуль tarfile точно так же, как вы использовали модуль zipfile. Чтобы завершить ваш код и получить имена файлов в файле tar.gz:
def scan_zip_file(zfile):
l_files = []
with zipfile.ZipFile(zfile, 'r') as zf:
for zname in zf.namelist():
if zname.endswith('.zip'):
with zipfile.ZipFile(io.BytesIO(zf.read(zname))) as zf2:
l_files.extend(zf2.namelist())
elif zname.endswith('.tar.gz'):
with tarfile.open(fileobj=io.BytesIO(zf.read(zname))) as tf:
l_files.extend(tf.getnames())
else:
l_files.append(zname)
Аргумент fileobj
для tarfile.open
указывает ему использовать 'File-like object', который io.BytesIO возвращается.