2015-04-24 2 views
2

Я пытаюсь написать очень простой скрипт, который подсчитывает количество записей/файлов, данных для данного ZIP-файла, для некоторых статистических данных.Доступ к .zipx с Python

Я использую библиотеку zipfile, и я столкнулся с этой проблемой, когда библиотека, похоже, не поддерживает формат .zipx.

bash-3.1$ python zipcount.py t.zipx 

Traceback (most recent call last): 
    File "zipcount.py", line 10, in <module> 
    zipCount(file) 
    File "zipcount.py", line 5, in zipCount 
    with ZipFile(file, "r") as zf: 
    File "c:\Python34\lib\zipfile.py", line 937, in __init__ 
    self._RealGetContents() 
    File "c:\Python34\lib\zipfile.py", line 978, in _RealGetContents 
    raise BadZipFile("File is not a zip file") 
zipfile.BadZipFile: File is not a zip file 

погуглить помощи показывает, что формат zipx не то же самое, как zip, и поэтому, возможно, я не должен ожидать, чтобы это работало. Дальше googling, хотя и не воспитывает библиотеку, которая фактически может дело с zipx. Поиск переполнения стека тоже не нашел.

Я не могу быть единственным человеком, который хочет манипулировать файлами zipx в python, не так ли? Какие-либо предложения?

+0

.zipx, как представляется, использовать сжатие (хг http://kb.winzip.com/kb/entry/7). См. Здесь, как распаковать архивы xz: https://stackoverflow.com/questions/17217073/how-to-decompress-a-xz-file-which-has-multiple-folders-files-inside-in-a-singl – chown

+0

Попытка использовать lzma на zipx, похоже, дает '_lzma.LZMAError: формат ввода не поддерживается декодером – FrobberOfBits

+1

http://kb.winzip.com/help/help_compression.htm утверждает, что winzip будет использовать один из этих 4 методов сжатия на основе на что бы ни подумали, сделает самый маленький архив: 'bzip2',' LZMA', 'PPMd' или' XZ'. Итак, поскольку xz и lzma не работают, попробуйте bz2: https://docs.python.org/2/library/bz2.html. Также проверьте это для интерфейса python для всех 4: https://www.chilkatsoft.com/compression-python.asp – chown

ответ

1

chilkat может работать для этого. Это не является бесплатной библиотекой, но есть 30-дневная пробная версия. Вот пример из http://www.example-code.com/python/ppmd_compress_file.asp:

import sys 
import chilkat 

compress = chilkat.CkCompression() 

# Any string argument automatically begins a 30-day trial. 
success = compress.UnlockComponent("30-day trial") 
if (success != True): 
    print "Compression component unlock failed" 
    sys.exit() 

compress.put_Algorithm("ppmd") 

# Decompress back to the original: 
success = compress.DecompressFile("t.zipx", "t") 
if (success != True): 
    print compress.lastErrorText() 
    sys.exit() 

print "Success!" 

В API документация: http://www.chilkatsoft.com/refdoc/pythonCkCompressionRef.html

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