2015-03-23 2 views
0

У меня есть zip-файл в S3, который я пытаюсь загрузить, а затем разархивируйте.Ошибка в распаковке файла, загруженного с S3 с использованием python

Я закодированы эти строки:

conn = S3Connection('','') 
bucket = conn.get_bucket('buck1') 
key = bucket.get_key("folder1/foldr2/file1.gz") 

f = open('/folder1/folder2/file1.gz', 'w') 
key.get_file(f) 
f.close() 

cmd = 'unzip /folder1/folder2/file1.gz' 
system(cmd) 

Но это дает следующие ошибки:

End-of-central-directory signature not found. Either this file is not 
Archive: /folder1/folder2/file1.gz 
a zipfile, or it constitutes one disk of a multi-part archive. In the 
latter case the central directory and zipfile comment will be found on 
the last disk(s) of this archive. 
unzip: cannot find zipfile directory in one of /folder1/folder2/file1.gz or 
     /folder1/folder2/file1.gz.zip, and cannot find /folder1/folder2/file1.gz.ZIP, period. 

Я попробовал этот код также расстегнуть, но это также дало ошибку в cannot be unzipped as this does not seems a zip file:

zip_ref = zipfile.ZipFile('/folder1/folder2/file1.gz', 'r') 
zip_ref.extractall('/folder1/folder2/') 
zip_ref.close() 

Я знаю, что пришла ошибка когда есть какая-то проблема с zip-файлом, но я не понимаю, я просто вытаскиваю файл с S3 и пытаясь разархивировать его. Как я могу разрешить эту ошибку и получить желаемый результат?

Примечание:Я не могу разархивировать файл вручную также на моем компьютере (linux). Я могу просмотреть загруженный файл, но не могу его распаковать и получить ошибку. Также, если я загружаю файл вручную из s3, а затем вручную распакую его, он распаковывается без каких-либо ошибок.

+0

проверили ли вы, что файл dowoaded вручную? Если да, можете ли вы также разархивировать его вручную? – thefragileomen

+0

@thefragileomen Да, я могу видеть zip-файл на моей машине, но я не могу разархивировать его вручную. Он дает ошибку как «неспособность расширять файл» –

+0

Выполняется ли это на ОС Linux? – thefragileomen

ответ

2

AFAIK, вы не можете использовать unzip, чтобы открыть архив gzip. unzip предназначен только для файлов .ZIP. Используйте команду gunzip для .gz файлов:

cmd = 'gunzip /folder1/folder2/file1.gz' 
system(cmd) 

EDIT:

Если файл еще поврежден, вы должны убедиться, что это на самом деле GZIP файл. Попробуйте следующее:

hd /folder1/folder2/file1.gz | head 

Вы должны получить что-то вроде:

00000000 1f 8b 08 08 0e 7f fc 50 00 03 63 6f 70 79 5f 63 |.......P..copy_c| 

Убедитесь, что Форст два октета после 00000000 является 1f 8b, что заголовок для файла GZIP.

+0

Я все же получил ошибку, так как «неожиданный конец файла. Неудачный коммит» –

+0

является hd в начале команды? Я получаю ошибку 'hd: command not found' –

+0

Вы можете попробовать заменить' hd' на 'hexdump' –

0

Возможно, файл не является хорошим .gz-файлом (и, как уже упоминалось, вы не можете использовать unzip для обработки gzip-файла .gz) есть другой способ загрузить файл, не используя явно файл.

на основе кода:

key.set_contents_to_file('/path/to/file.gz') 

Вы также можете посмотреть в GZIP модуль https://docs.python.org/2/library/gzip.html

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