Seite 1 von 1

for problem

Verfasst: Dienstag 21. November 2006, 17:58
von MoR4euZ
hallo

ich habe ein for problem
ich komme einfach nicht auf die lösung :(
wo gehören die breaks hin und wo genau die print anweisung?

ich will ja nicht alles vier mal haben :)

Code: Alles auswählen

from xml.etree import ElementTree as etree

xmldoc = './xml/process.xml'

def avaPids():
    root = etree.parse(xmldoc).getroot()
    
    for longname in root.findall('.///LongName'):
        for process in root.findall('.//Process'):
            for pid in process.attrib.itervalues():
                break
            print longname.text, 'PID:', pid

if __name__ == '__main__':
    avaPids()
ausgabe

Code: Alles auswählen

Notepad PID: 1
Notepad PID: 2
Notepad PID: 3
Notepad PID: 4
Solitaer PID: 1
Solitaer PID: 2
Solitaer PID: 3
Solitaer PID: 4
Calculator PID: 1
Calculator PID: 2
Calculator PID: 3
Calculator PID: 4
Visual Improved PID: 1
Visual Improved PID: 2
Visual Improved PID: 3
Visual Improved PID: 4
gewünschte ausgabe

Code: Alles auswählen

Notepad PID: 1
Solitaer PID: 2
Calculator PID: 3
Visual Improved PID: 4
gruß
mor4euz

Verfasst: Dienstag 21. November 2006, 18:26
von sape
probiere mal so (ungetestet)

Code: Alles auswählen

for longname in root.findall('.///LongName'):
    for process in root.findall('.//Process'):
        for pid in process.attrib.itervalues():
            print longname.text, 'PID:', pid 
            break
        break
    break

Verfasst: Dienstag 21. November 2006, 18:33
von MoR4euZ
jap das habe ich ausprobiert
aber wo gehört dan die printanweisung hin? :)

Verfasst: Dienstag 21. November 2006, 19:04
von BlackJack
Bitte einen Schritt zurücktreten und schauen was Du da machst und was Du machen willst.

Was da steht ist: für jeden "langen Namen" im *gesamten* Dokument mache folgendes: für jeden Prozess im *gesamten* Dokument gib "langen Namen" und PID vom Prozess aus.

Was Du haben möchtest ist aber: für jeden Prozess im gesamten Dokument mache folgendes: suche den "langen Namen" im *aktuellen* Prozess und gib den plus PID aus.

Den zweiten Absatz musst Du jetzt nur noch in Quelltext überführen.

Verfasst: Donnerstag 23. November 2006, 22:33
von MoR4euZ
danke der pseudocode hat mir echt geholfen
nenene war ich verwirrt :)

bin heute dazu gekommen es mal umzusetzten
habe es nun so gelöst:

Code: Alles auswählen

    root = etree.parse(xmldoc).getroot()
    for process in root.findall('.//Process'):
        for longname in process.getiterator('LongName'):
            for pid in process.attrib.itervalues():
                print longname.text, ': -p', pid
                break
            break
breaks gehören da nicht mehr rein oder?

Verfasst: Donnerstag 23. November 2006, 23:42
von BlackJack
Nein eigentlich nicht. Es sollte in einem Prozess ja nur einen "LongName" und eine PID geben, also sind die beiden inneren Schleifen eigentlich überflüssig.