Как преобразовать файл tar в tar.gz, используя только Python? - PullRequest
0 голосов
/ 08 ноября 2018

Я ищу, как преобразовать файл tar в tar.gz, используя только код Python? Я перепробовал много вопросов, но ничего не работает
https://docs.python.org/3.6/library/tarfile.html
https://docs.python.org/3.6/library/gzip.html


Я получаю другую ошибку:

с помощью gzip.open он создает файл "gz" с "tar" в нем
import gzip

tarfile = "/home/user/file.tar"
with open(tarfile, 'rb') as f_in:
    with gzip.open(tarfile+'.gz', 'wb') as f_out:
        f_out.writelines(f_in)

с copy.deepcopy + сжатие gzip, у меня есть TextIOWrapper или BufferedReader с функцией Deepcopy
import gzip, copy
tarfile = "/home/user/file.tar"

with open(tarfile, 'rb') as f_in:
    data = copy.deepcopy(f_in)
with open(tarfile+'.gz', 'wb') as f_out:
        try:
            gdata = gzip.compress(data)
            f_out.write(gdata)
        except Exception as e:
            print("error: %s" % (e))

gzip.compress + напишите, у меня есть "BufferedReader"
import gzip

tarfile = "/home/user/file.tar"
with open(tarfile, 'rb') as f_in:   
    with open(tarfile+'.gz', 'wb') as f_out:
        try:
            data = gzip.compress(f_in)
            f_out.write(data)
        except Exception as e:
            print("error: %s" % (e))

Итак, мне нужна помощь.

1 Ответ

0 голосов
/ 09 ноября 2018

Я думаю, что самый простой способ - это просто распаковать tar-файл во временный каталог и затем снова сжать его как tar.gz:

import tarfile, shutil

TARFILE = "/home/user/file.tar"
TMP_DIR = ".tar_gz_converter_tmp"

with tarfile.open(TARFILE ) as f:
    f.extractall(TMP_DIR)

with tarfile.open(TARFILE + ".gz", "w:gz") as f:
    f.add(TMP_DIR, ".")

shutil.rmtree(TMP_DIR)

Обратите внимание, как tarfile может сжимать файл как tar.gz, если установить режим на w:gz. Также должно быть возможно сделать преобразование в памяти, но это определенно более сложно.

...