for problem

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
MoR4euZ
User
Beiträge: 34
Registriert: Mittwoch 18. Oktober 2006, 21:21
Wohnort: Essen
Kontaktdaten:

Dienstag 21. November 2006, 17:58

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
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Dienstag 21. November 2006, 18:26

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
Benutzeravatar
MoR4euZ
User
Beiträge: 34
Registriert: Mittwoch 18. Oktober 2006, 21:21
Wohnort: Essen
Kontaktdaten:

Dienstag 21. November 2006, 18:33

jap das habe ich ausprobiert
aber wo gehört dan die printanweisung hin? :)
BlackJack

Dienstag 21. November 2006, 19:04

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.
Benutzeravatar
MoR4euZ
User
Beiträge: 34
Registriert: Mittwoch 18. Oktober 2006, 21:21
Wohnort: Essen
Kontaktdaten:

Donnerstag 23. November 2006, 22:33

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?
BlackJack

Donnerstag 23. November 2006, 23:42

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.
Antworten