XML dokumentide parsija: Difference between revisions
From ICO wiki
Jump to navigationJump to search
Created page with '==Skripti kirjeldus== Kasutajalt küsitakse esimeseks sisendiks XML dokumendi nimi või "*", juhul kui soovitakse kõikki kaustas olevaid XML dokumente töödelda. Seejärel kont…' |
|||
Line 1: | Line 1: | ||
==Skripti kirjeldus== | ==Skripti kirjeldus== | ||
Kasutajalt küsitakse esimeseks sisendiks XML dokumendi nimi või "*", juhul kui soovitakse kõikki kaustas olevaid XML dokumente töödelda. Seejärel kontrollitakse, et sisendiks antud dokumendi laiend oleks õige või pannakse massiivi kõikide kaustas olevate XML dokumentide nimed. Seejärel võetakse massiivist ükshaaval XML dokumendi nimed ning parsitakse, st võetakse XML dokumendist DataFile elementide vahel base64 kood, mis | Kasutajalt küsitakse esimeseks sisendiks XML dokumendi nimi või "*", juhul kui soovitakse kõikki kaustas olevaid XML dokumente töödelda. Seejärel kontrollitakse, et sisendiks antud dokumendi laiend oleks õige või pannakse massiivi kõikide kaustas olevate XML dokumentide nimed. Seejärel võetakse massiivist ükshaaval XML dokumendi nimed ning parsitakse, st võetakse XML dokumendist DataFile elementide vahel base64 kood, mis dekodeeritakse ning salvestatakse DataFile atribuutdi Filename järgi. Luuakse kaust/kaustad, hakatakse parsima, pärast vaadatakse mitu faili on kaustas ning kausta suurus | ||
==Skript== | ==Skript== | ||
<source lang="python"> | <source lang="python"> |
Revision as of 10:42, 28 January 2011
Skripti kirjeldus
Kasutajalt küsitakse esimeseks sisendiks XML dokumendi nimi või "*", juhul kui soovitakse kõikki kaustas olevaid XML dokumente töödelda. Seejärel kontrollitakse, et sisendiks antud dokumendi laiend oleks õige või pannakse massiivi kõikide kaustas olevate XML dokumentide nimed. Seejärel võetakse massiivist ükshaaval XML dokumendi nimed ning parsitakse, st võetakse XML dokumendist DataFile elementide vahel base64 kood, mis dekodeeritakse ning salvestatakse DataFile atribuutdi Filename järgi. Luuakse kaust/kaustad, hakatakse parsima, pärast vaadatakse mitu faili on kaustas ning kausta suurus
Skript
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Impordime vajalikud teegid
import os
import sys
import glob
import time
import base64
import xml.dom.minidom
from xml.dom.minidom import parse
# Loome vajalikud muutujad/massiivid
XMLDocument=""
XMLDocuments=list()
# Küsime kasutajalt faili nime või * juhul kui ta soovib töödelda kõikki kaustas olevaid faile
while (not os.path.exists(XMLDocument)):
XMLDocument = raw_input("Sisesta XML dokumendi nimi või * juhul kui soovid töödelda kõikki kaustas olevaid XML dokumente: ")
# Kui kasutaja sisestas "*" siis salvestatakse kõik samas kaustas olevate XML dokumentide nimed massiivi ning kaktestatakse while tsükkel
if XMLDocument == "*":
print "Kasutaja sisestas *"
for files in glob.glob("*.xml"):
XMLDocuments.append(files)
break
# Kontrollime, kas kasutaja sisestatud dokumendi nime laiend on ".xml"
elif XMLDocument[-4:] != ".xml":
print "Vale laiendiga nimi!"
# Kui eelmistest kadalippidest läbitud kontrollime üle, kas dokument on olemas, et kuvada vastava sisuline teade
elif not os.path.exists(XMLDocument):
print "Faili ei eksisteeri!"
# Juhul kui kasutaja sisestab ühe dokumendi lisame massiivi
else:
XMLDocuments.append(XMLDocument)
# Kõik massiivis olevad dokumendid töötleme läbi
for XMLDocumentName in XMLDocuments:
print "Dokumendi", XMLDocumentName, "töötlemine"
# Avame dokumendi
XMLDocument = open(XMLDocumentName)
# Loome dokumendi failidele kausta nimetuse
dataFilesDir = XMLDocumentName[:-4]
# Kontrollime, kas kaust on olemas, kui ei ole siis loome
if not os.path.isdir(dataFilesDir):
os.mkdir(dataFilesDir)
# Käivitame kella, ehk anname muutujale hetke kellaaja
seconds = time.time()
# XML dokumendi parsimine
XMLParsed = parse(XMLDocument)
# Alustame failide salvestamisega dokumendist, kuvame infot kasutajale
print "Dokumendi", XMLDocumentName, "failid salvestatakse kausta:", dataFilesDir
# Iga DataFile elemendi kohta käivitatakse järgnev protsess
for node in XMLParsed.getElementsByTagName("DataFile"):
# Dokumendi faili nimeks anname elemendi atribuudi, mis tähistab faili nime
dataFileName = node.getAttribute("Filename")
# Võtame elemendi väärtusest base64 kodeeritud andmed
dataFileData = node.childNodes[0].nodeValue
# Valmistame ette faili täispika asukoha koos nimega
dataFileDir = os.path.join(dataFilesDir,dataFileName)
# Avame faili, luuakse uus fail
fileObj = open(dataFileDir, "w")
# Salvestame faili base64 dekodeeritud andmed
fileObj.write(base64.b64decode(dataFileData))
# Fail suletakse
fileObj.close()
#Trükime välja faili nime ja suuruse
dataFileSize = os.path.getsize(dataFileDir)
print dataFileName, "%0.3f KB" % float(dataFileSize/1024.0)
# Loome/taasväärtustame muutujad
dataFilesSize=0
dataFilesCount=0
folder_size = 0
# Iga faili kohta kaustas toimub järgnev tegevus
for (path, dirs, files) in os.walk(dataFilesDir):
for file in files:
# Tuletame faili täispika nime jälle
dataFileName = os.path.join(path, file)
# Liidame failide kogumahule faili mahu
dataFilesSize += os.path.getsize(dataFileName)
# Liidame faili loendurile ühe juurd
dataFilesCount+=1
# Trükime välja mitu faili kokku dokumendist kättesaadis ning kogumaht
print "Kokku",dataFilesCount,"faili mahuga %0.3f KB" % float(dataFilesSize/1024.0)
# Näitame kaua kulus töötlemisele aega, lõpp lahutatud algus=stopper
seconds = time.time() - seconds
print "XML faili töötluseks kulus %.3f sekundit" % seconds
Autor
--Marko Valing, AK31(2010) 10:42, 28 January 2011 (EET)