| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| | import os
|
| | from defusedxml import sax as defused_sax
|
| | from xml.sax.handler import ContentHandler
|
| | import zipfile
|
| |
|
| |
|
| |
|
| | class DocumentHandler(ContentHandler):
|
| | def __init__(self, dirname):
|
| | super().__init__()
|
| | self.files = []
|
| | self.dirname = dirname
|
| |
|
| | def startElement(self, name, attributes):
|
| | item = attributes.get("file")
|
| | if item is not None:
|
| | self.files.append(os.path.join(self.dirname, str(item)))
|
| |
|
| | def characters(self, data):
|
| | return
|
| |
|
| | def endElement(self, name):
|
| | return
|
| |
|
| |
|
| | def extractDocument(filename, outpath):
|
| | zfile = zipfile.ZipFile(filename)
|
| | files = zfile.namelist()
|
| |
|
| | for i in files:
|
| | data = zfile.read(i)
|
| | dirs = i.split("/")
|
| | if len(dirs) > 1:
|
| | dirs.pop()
|
| | curpath = outpath
|
| | for j in dirs:
|
| | curpath = curpath + "/" + j
|
| | os.mkdir(curpath)
|
| | output = open(outpath + "/" + i, "wb")
|
| | output.write(data)
|
| | output.close()
|
| |
|
| |
|
| | def createDocument(filename, outpath):
|
| | files = getFilesList(filename)
|
| | compress = zipfile.ZipFile(outpath, "w", zipfile.ZIP_DEFLATED)
|
| | for i in files:
|
| | dirs = os.path.split(i)
|
| |
|
| | compress.write(i, dirs[-1], zipfile.ZIP_DEFLATED)
|
| | compress.close()
|
| |
|
| |
|
| | def getFilesList(filename):
|
| | dirname = os.path.dirname(filename)
|
| | handler = DocumentHandler(dirname)
|
| | parser = defused_sax.make_parser()
|
| | parser.setContentHandler(handler)
|
| | parser.parse(filename)
|
| |
|
| | files = []
|
| | files.append(filename)
|
| | files.extend(iter(handler.files))
|
| | dirname = os.path.join(dirname, "GuiDocument.xml")
|
| | if os.path.exists(dirname):
|
| | files.append(dirname)
|
| | return files
|
| |
|