Найти - Пользователи
Полная версия: Сжатие tar-файла
Начало » Python для экспертов » Сжатие tar-файла
1
grok
Доброго времени суток.
Ситуация следующая:
Создаю объект TarFile с аргументом fileobj=StringIO.StringIO() и добавляю туда необходимые мне файлы, т.е. все данные записываются не на диск, а в объект файла. Подскажите, как теперь сжать посредством zlib.compress() данный объект tarfile.TarFile? Другое дело было, если бы я сжимал его, открыв и прочитав данный файл с диска, типа:
import zlib, tarfile, StringIO
tf = open('t.tar', 'r').read()
zl = zlib.compress(tf)

Как быть, если объект файла берется из памяти?
import zlib, tarfile, StringIO
tf = tarfile.open(mode='w', fileobj=StringIO.StringIO())
tf.add('file_one')
tf.add('file_two')
...
tf.close()
zl = zlib.compress(???)
Спасибо.
Ed
Как-то так:
fileobj = StringIO.StringIO()
tf = tarfile.open(mode='w', fileobj=fileobj)
...
tf.close()
fileobj.seek(0)
zl = zlib.compress(fileobj.read())
Ed
А tarfile.open(mode='w:gz', …) не сделает тоже самое, что вы хотите?
grok
Ed
Как-то так:
fileobj = StringIO.StringIO()
tf = tarfile.open(mode='w', fileobj=fileobj)
...
tf.close()
fileobj.seek(0)
zl = zlib.compress(fileobj.read())
Большое спасибо!
Ed
А tarfile.open(mode='w:gz', …) не сделает тоже самое, что вы хотите?
zlib на 1,5/2 в моих результатах показал себя шустрее, чем тот же 'w:gz' + мне важно выбирать степень сжатия данных, а в 'w:gz' по-умолчанию, как я понял, идет максимальная степень сжатия, т.е. 9.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB