FreeCAD

Форк
0
/
doctools.py 
73 строки · 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

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

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

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

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

31

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

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

49

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

59

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

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

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

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

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

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