Я нахожусь на своей второй неделе Python, и я застрял в каталоге zipped/unzipped logfiles, который мне нужно разобрать и обработать.Как проверить каталог файлов для gzip и распаковать gzip-файлы в Python с помощью zcat?
В настоящее время я делаю это:
import os
import sys
import operator
import zipfile
import zlib
import gzip
import subprocess
if sys.version.startswith("3."):
import io
io_method = io.BytesIO
else:
import cStringIO
io_method = cStringIO.StringIO
for f in glob.glob('logs/*'):
file = open(f,'rb')
new_file_name = f + "_unzipped"
last_pos = file.tell()
# test for gzip
if (file.read(2) == b'\x1f\x8b'):
file.seek(last_pos)
#unzip to new file
out = open(new_file_name, "wb")
process = subprocess.Popen(["zcat", f], stdout = subprocess.PIPE, stderr=subprocess.STDOUT)
while True:
if process.poll() != None:
break;
output = io_method(process.communicate()[0])
exitCode = process.returncode
if (exitCode == 0):
print "done"
out.write(output)
out.close()
else:
raise ProcessException(command, exitCode, output)
который я "сшиты" вместе с помощью этих SO ответы (here) и (here · блоги, ·)
Однако, это не похоже на работу , потому что мой тестовый файл составляет 2,5 ГБ, а скрипт пережевывает его на 10 + мин плюс я не уверен, что то, что я делаю, все равно правильно.
Вопрос:
Если я не хочу использовать модуль GZIP и нужен де-компресс кусок по-кусок (фактические файлы> 10GB), как я могу разархивировать и сохранить в файл с помощью zcat и подпроцесс в Python?
Спасибо!
Я неясный на то, что ваша цель. Вы пытаетесь распаковать все файлы в каталоге? Эквивалентно: 'gunzip * .gz'? Есть ли у вас какое-либо конкретное возражение против использования модуля gzip? –
Каталог содержит файлы в формате zipped и unzipped. Мне нужно обрабатывать оба в одном процессе, поэтому моя идея состояла в том, чтобы (1) сначала запустить над каталогом, (2) выбрать zipped файлы и распаковать в новый файл (3), а затем выполнить 2-й прогон для обработки. Не уверен, что это лучший способ пойти, но – frequent
re: objection 'gzip', не так ли, что gzip очень медленный - как упоминалось [здесь] (http://codebright.wordpress.com/2011/03/ 25/139 /)? – frequent