Extract_ePUAP - narzędzie zgodne do szybkiej ekstrakcji z pobranych (całych) dokumentów załączników. Nie wpływa na treść. Przydatny zwłaszcza przy wielu załącznikach. KISS.

Użycie

$ extract_epuap --help
usage: extract_epuap [-h] file [file ...]
 
Extract files from ePUAP docs
 
positional arguments:
  file
 
optional arguments:
  -h, --help  show this help message and exit
$ extract_epuap koperta*
koperta_2.xml --> KW_398768_DKSiW-WSWiA_plik2.DOC as KW_398768_DKSiW-WSWiA_plik2_1.DOC (0/2)
koperta_2.xml --> KW_398768_DKSiW-WSWiA_plik2.DOC.XAdES as KW_398768_DKSiW-WSWiA_plik2.DOC_1.XAdES (1/2)
koperta.xml --> KW_398768_DKSiW-WSWiA_plik2.DOC as KW_398768_DKSiW-WSWiA_plik2_2.DOC (0/2)
koperta.xml --> KW_398768_DKSiW-WSWiA_plik2.DOC.XAdES as KW_398768_DKSiW-WSWiA_plik2.DOC_2.XAdES (1/2)

Kod

#!/usr/bin/python
import os
import sys
import argparse
from xml.etree import ElementTree
from base64 import b64decode
from urllib2 import unquote
ATTACH_LIST_PATH = './/{http://crd.gov.pl/xml/schematy/struktura/2009/11/16/}Zalacznik'
DATA_PATH = '{http://crd.gov.pl/xml/schematy/struktura/2009/11/16/}DaneZalacznika'
def unique_file(filename):
    counter = 1
    filename_parts = os.path.splitext(filename) # returns ('/path/file', '.ext')
    while 1:
        try:
            fd = os.open(filename, os.O_CREAT | os.O_EXCL | os.O_RDWR)
            return os.fdopen(fd,'w'), filename
        except OSError:
            pass
        filename = filename_parts[0] + '_' + str(counter) + filename_parts[1]
        counter += 1
 
parser = argparse.ArgumentParser(description='Extract files from ePUAP docs')
parser.add_argument('file', nargs='+', type=argparse.FileType('r'),
                   default=sys.stdin)
args = parser.parse_args()
 
for fd in args.file:
    document = ElementTree.parse(fd)
    root = document.getroot()
    attachment_list = root.findall(ATTACH_LIST_PATH)
    for i, att in enumerate(attachment_list):
        data = att.find(DATA_PATH).text
        if att.attrib['kodowanie'] == 'base64':
            data = b64decode(data)
        else:
            data = unquote(urllib2)
        filename = att.attrib.get('nazwaPliku') or 'unknown.bin'
        fp, filename_new = unique_file(filename)
        fp.write(data)
        fp.close()
        print "%s --> %s as %s (%s/%s)" % (fd.name, filename, filename_new, i, len(attachment_list))

~~DISCUSSION~~

it/extract_epuap.txt · ostatnio zmienione: 2014/02/11 23:36 przez naczelnik
Public Domain
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0