FreeCAD

Форк
0
/
doctools.py 
72 строки · 1.9 Кб
1
#! python
2
# -*- coding: utf-8 -*-
3
# (c) 2010 Werner Mayer LGPL
4
# FreeCAD Python script to work with the FCStd file format.
5

6
import os
7
import xml.sax
8
import xml.sax.handler
9
import xml.sax.xmlreader
10
import zipfile
11

12
# SAX handler to parse the Document.xml
13
class DocumentHandler(xml.sax.handler.ContentHandler):
14
    def __init__(self, dirname):
15
        super().__init__()
16
        self.files = []
17
        self.dirname = dirname
18

19
    def startElement(self, name, attributes):
20
        item = attributes.get("file")
21
        if item is not None:
22
            self.files.append(os.path.join(self.dirname, str(item)))
23

24
    def characters(self, data):
25
        return
26

27
    def endElement(self, name):
28
        return
29

30

31
def extractDocument(filename, outpath):
32
    zfile = zipfile.ZipFile(filename)
33
    files = zfile.namelist()
34

35
    for i in files:
36
        data = zfile.read(i)
37
        dirs = i.split("/")
38
        if len(dirs) > 1:
39
            dirs.pop()
40
            curpath = outpath
41
            for j in dirs:
42
                curpath = curpath + "/" + j
43
                os.mkdir(curpath)
44
        output = open(outpath + "/" + i, "wb")
45
        output.write(data)
46
        output.close()
47

48

49
def createDocument(filename, outpath):
50
    files = getFilesList(filename)
51
    compress = zipfile.ZipFile(outpath, "w", zipfile.ZIP_DEFLATED)
52
    for i in files:
53
        dirs = os.path.split(i)
54
        # print i, dirs[-1]
55
        compress.write(i, dirs[-1], zipfile.ZIP_DEFLATED)
56
    compress.close()
57

58

59
def getFilesList(filename):
60
    dirname = os.path.dirname(filename)
61
    handler = DocumentHandler(dirname)
62
    parser = xml.sax.make_parser()
63
    parser.setContentHandler(handler)
64
    parser.parse(filename)
65

66
    files = []
67
    files.append(filename)
68
    files.extend(iter(handler.files))
69
    dirname = os.path.join(dirname, "GuiDocument.xml")
70
    if os.path.exists(dirname):
71
        files.append(dirname)
72
    return files
73

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.