Форум сайта python.su
Доброго времени суток.
Ситуация следующая:
Создаю объект 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(???)
Офлайн
Как-то так:
fileobj = StringIO.StringIO()
tf = tarfile.open(mode='w', fileobj=fileobj)
...
tf.close()
fileobj.seek(0)
zl = zlib.compress(fileobj.read())
Офлайн
А tarfile.open(mode='w:gz', …) не сделает тоже самое, что вы хотите?
Офлайн
EdБольшое спасибо!
Как-то так:fileobj = StringIO.StringIO()
tf = tarfile.open(mode='w', fileobj=fileobj)
...
tf.close()
fileobj.seek(0)
zl = zlib.compress(fileobj.read())
Edzlib на 1,5/2 в моих результатах показал себя шустрее, чем тот же 'w:gz' + мне важно выбирать степень сжатия данных, а в 'w:gz' по-умолчанию, как я понял, идет максимальная степень сжатия, т.е. 9.
А tarfile.open(mode='w:gz', …) не сделает тоже самое, что вы хотите?
Отредактировано grok (Июнь 6, 2012 13:17:51)
Офлайн