Accessing .zipx with Python

你。 提交于 2019-12-24 02:54:09

问题


I'm attempting to write a very simple script that counts the number of entries/files a given ZIP file has, for some statistics.

I'm using the zipfile library, and I'm running into this problem where the library appears not to support .zipx format.

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

Googling for help reveals that the zipx format is not the same as zip, and so maybe I shouldn't be expecting this to work. Further googling though fails to bring up a library that actually can deal with zipx. Searching stack overflow didn't find much either.

I can't possibly be the only person who wants to manipulate zipx files in python, right? Any suggestions?


回答1:


chilkat might work for this. It's not a free library but there is a 30 day trial. Here is an example from 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!"

The API documentation: http://www.chilkatsoft.com/refdoc/pythonCkCompressionRef.html




回答2:


There is no direct python package to unzip the zipx files in python. So, One simple way to unzip it is using subprocess and winzip application. Please find the below code.

import subprocess

command = "C:\Program Files\WinZip\wzunzip.exe" "D:\Downloads\hello.zipx" "D:\unzip_location"

subprocess.run(command, shell=True, timeout=120)


来源:https://stackoverflow.com/questions/29852100/accessing-zipx-with-python

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!