2014-02-04 4 views
1

Мой вопрос является следствием этого one. Я хотел бы знать, как я могу изменить следующий код, чтобы я мог назначить уровень сжатия:Python: присвоить уровень сжатия tarfile

import os 
import tarfile 

home = '//global//scratch//chamar//parsed_data//batch0' 
backup_dir = '//global//scratch//chamar//parsed_data//' 

home_dirs = [ name for name in os.listdir(home) if os.path.isdir(os.path.join(home, name)) ] 

for directory in home_dirs: 
    full_dir = os.path.join(home, directory) 
    tar = tarfile.open(os.path.join(backup_dir, directory+'.tar.gz'), 'w:gz') 
    tar.add(full_dir, arcname=directory) 
    tar.close() 

В принципе, то, что делает этот код является то, что цикл я через каждый каталог в batch0 и сжать каждый каталог (где в каждом каталоге есть 6000+ файлов) и создать сжатый файл tar.gz для каждого каталога в //global//scratch//chamar//parsed_data//. Я думаю, что по умолчанию уровень сжатия = 9, но для сжатия требуется много времени. Мне не нужно много сжатия. Уровень 5 будет достаточным. Как я могу изменить приведенный выше код, чтобы включить уровень сжатия?

ответ

1

В модуле gzopen имеется опция уровня сжатия. В строке ниже следует заменить один с tarfile.open вызова в вашем примере:

tar = tarfile.TarFile.gzopen(os.path.join(backup_dir, directory+'.tar.gz'), mode='w', compresslevel=5) 
+0

спасибо за помощь, но я получаю следующее сообщение об ошибке 'AttributeError:«модуль»объект не имеет атрибута«gzopen'' – Plug4

+0

Я также добавил, 'Импорт gzip' но та же ошибка – Plug4

+0

какая у вас версия python? –

1

Существует приписывать compresslevel вы можете перейти к open() (нет необходимости использовать gzopen() непосредственно):

tar = tarfile.open(filename, "w:gz", compresslevel=5) 

От gzip documentation, compresslevel может быть числом от 1 до 9 (по умолчанию 9), 1 - самый быстрый и наименее сжатый, а 9 - самый медленный и самый сжатый.

[Смотрите также: tarfile documentation]

Смежные вопросы