XML-Datei mit python einlesen

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
merlinerick
User
Beiträge: 5
Registriert: Dienstag 28. Juli 2009, 17:50

Dienstag 28. Juli 2009, 18:46

Hallo!
Ich bin neuling in Python-Programmiersprache und habe gleich eine Aufgabe, eine XML-Datei einzulesen. Dafür habe ich folgendes Code bekommen, dass ich benutzen soll (muss!!):

Code: Alles auswählen

"""Script zum Durchführen der Tests in den Sourcen.
"""

import os

################################################################################
# BuildError
class BuildError(Exception):
    """Diese Exception wird geworfen, wenn ein Fehler bei der Erstellung aufgetreten ist.
    """

################################################################################
# shell_command
def shell_command(cmd):
    """Startet einen Prozess und gibt den Output des Prozesses als
       Stringliste zurück.
    """
    cmd2 = cmd + ' 2>&1'
    p = os.popen(cmd2)
    lines = []
    line = p.readline()
    while line:
        lines.append(line)
        line = p.readline()
    try:
        status = p.close()
    except KeyboardInterrupt, e:
        raise
    except:
        raise BuildError(''.join(lines))
    if status:
        raise BuildError(''.join(lines))

    return lines

################################################################################
# execute_config
def execute_testscripts(path, config):
    """Sucht in dem gegebenen Verzeichnis nach Scripten, die auf .test.pl, .test.py oder .test.bat enden
       und führt diese aus. Wird ein Status verschieden von 0 zurückegegeben, dann wird die Ausgabe
       des Scriptes als Fehlermeldung eingefügt.
       Zurückgegeben wird eine Table, pro Testscript ein Eintrag mit den Fehlermeldungen.
    """
    messages = {};
    for root, dirs, files in os.walk(path):
        if root.find('.svn') < 0: # nicht die Dateien aus den .svn-Verzeichnissen
            for file in files:
                cmd = None
                if file.lower().endswith('.test.pl'):
                    cmd = 'perl.exe '
                elif file.lower().endswith('.test.py'):
                    cmd = 'python.exe '
                elif file.lower().endswith('.test.bat'):
                    cmd = 'cmd /C '
                if cmd:
                    cmd += root + '\\' + file
                    print '%-30s ' % file,
                    try:
                        if 'Debug' in dirs:
                           shell_command('rmdir /S /Q ' + root + '\\Debug')   # Lösche alle Dateien des letzten Tests
                        shell_command(cmd + ' %s' % config)
                        print 'ok'
                        messages[file] = ''
                    except BuildError, e:
                        print 'Fehler'
                        messages[file] = str(e)

    return messages

################################################################################
# main
def main():
    """Das "Hauptprogramm".
    """
    import sys
    rootpath = sys.argv[1]

    messages = execute_testscripts(rootpath, 'Debug')
    text = ''
    has_errors = False
    for file in sorted(messages.keys()):
        status = 'ok'
        if messages[file]:
            status = 'Fehler'
            has_errors = True
        text += '%-30s  %s\n' % (file, status)
        if messages[file]:
            text += '=' * 80 + '\n'
            text += messages[file]
            text += '=' * 80 + '\n\n'

    dumpFile = open(sys.argv[2], 'w')
    dumpFile.write(text)
    dumpFile.close()
    return has_errors
    

################################################################################
if __name__ == '__main__':
    main()
Nun frage ich, wo ich was einfuegen soll um meine Datei zu lesen? Ich habe schon mit dem minidom-parser eine datei gelesen. Aber ich weiss nicht wo ich es in dem Code einfügen soll, wenn ich es hier benutzen soll.

Danke im voraus
Benutzeravatar
snafu
User
Beiträge: 5440
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Dienstag 28. Juli 2009, 19:04

merlinerick hat geschrieben:

Code: Alles auswählen

    cmd2 = cmd + ' 2>&1'
    p = os.popen(cmd2)
Erklär deinem Lehrer mal, dass man schon seit einigen Python-Versionen [mod]subprocess[/mod] benutzt. ;)
shcol (Repo | Doc | PyPi)
BlackJack

Dienstag 28. Juli 2009, 20:46

@merlinerick: Die Frage ist ziemlich sinnfrei. *Warum* muss denn eine XML-Datei eingelesen werden? Was steht da drin und was muss mit diesen Daten gemacht werden!?

Und das gegebene Programm sollte man dringend mal überarbeiten. Das hat jemand geschrieben, der nicht viel Erfahrung mit Python hat. Die Zeilen 21-25 lassen sich zum Beispiel in einer Zeile zusammenfassen: ``lines = list(p)``.
Antworten