[Programmierung] Python Problem

Hier wird geholfen...

Moderator: Moderatoren

Benutzeravatar
Fridericus Secundus
Primus Pilus
Primus Pilus
Beiträge: 2361
Registriert: 10. Dezember 2010 23:58
Wohnort: Herzogtum Bayern-München
:
Teilnahme an einem Contest Modder Spender

[Programmierung] Python Problem

Beitragvon Fridericus Secundus » 27. Januar 2016 17:34

Servus Forum,

nicht sicher, ob das hier richtig ist. Ich versuche, mittels Python eine XML-Datei zu parsen und ein bestimmtes Element an einer Indexposition herauszuziehen. Die Indexposition soll dabei zufällig sein, zwischen 1 und 3 (da es drei Geschwisterelemente namens <question>:

Code: Alles auswählen

selector = random.randint(1,3)
current = root.find(".//level[@id='1']/question[selector]/text")
print(current.text)

Das klappt aber nicht (den import-Code hab ich mal weggelassen). Setze ich statt [selector] den Index hardcoded, also z.B. [2], funktioniert der Code, wie er soll. Unterstützt xml.etee die Übergabe von Variablen in XPath Ausdrücken nicht? Kann ich mir kaum vorstellen, das ist doch eigtl. was sehr elementares, oder?
Ich bin Historiker. Da geht man immer mit ganz niedrigen Erwartungen an die Menschen ran.
-- Don Alphonso

Benutzeravatar
Tacitus
Administrator
Administrator
Beiträge: 2121
Registriert: 1. November 2010 21:45
Wohnort: nähe Köln
:
Team-SZ Gründer/Eigentümer der SZ

Re: [Programmierung] Python Problem

Beitragvon Tacitus » 27. Januar 2016 18:11

Ich hab noch nie was in Python geschrieben, aber so mal von anderen Sprachen aus interpretiere ich es auch als richtig.
Schon mal angeschaut, was selector für einen Wert enthält?

Oder versuch es mal hiermit:

Code: Alles auswählen

selected = random.choice(question)
current = root.find(".//level[@id='1']/selected/text")
print(current.text)
Bild

Benutzeravatar
Fridericus Secundus
Primus Pilus
Primus Pilus
Beiträge: 2361
Registriert: 10. Dezember 2010 23:58
Wohnort: Herzogtum Bayern-München
:
Teilnahme an einem Contest Modder Spender

Re: [Programmierung] Python Problem

Beitragvon Fridericus Secundus » 27. Januar 2016 20:33

Danke, ich teste das mal. :strategie_zone_80: Selector hat den gewünschten Zahlenwert: hab den mal testweise mit print() ausgeben lassen. Ein weiterer Typencast { selector = int(random.randint(1,3))} hat nix gebracht, an der Variable liegt es also nicht. Ich schätze, dass Etree innerhalb der XPath Ausdrücke keine "externen" Variablen (also solche aus dem "regulären" Pythoncode zulässt. Das ist eine erhebliche Einschränkung, sollte sich aber mit Workarounds schon beheben lassen (Alle <question>-tags in eine Liste laden, dann die Zufallszahl auf den Listenindex anwenden). Ist halt etwas unflexibler, weil man so erstmal alles in Python importieren muss.
Ich bin Historiker. Da geht man immer mit ganz niedrigen Erwartungen an die Menschen ran.
-- Don Alphonso

Benutzeravatar
Fridericus Secundus
Primus Pilus
Primus Pilus
Beiträge: 2361
Registriert: 10. Dezember 2010 23:58
Wohnort: Herzogtum Bayern-München
:
Teilnahme an einem Contest Modder Spender

Re: [Programmierung] Python Problem

Beitragvon Fridericus Secundus » 28. Januar 2016 09:28

Danke Tacitus, der Hinweis ging in die entscheidende Richtung. Da die XPath-Ausdrücke in Anführungszeichen notiert werden, kann innerhalb dieser Anführungszeichen nicht "nach draußen telefoniert" werden. Geht aber mit einem auf deinem Code basierenden Workaround:

Code: Alles auswählen

question = []
for item in root.findall(".//level[@id='1']//tenor"):
    question.append(item.text)
selected = random.choice(question)
print(selected)

Anm.: um das ganze eindeutig zu halten, habe ich das <text> tag in <tenor> umbenannt.
Ich bin Historiker. Da geht man immer mit ganz niedrigen Erwartungen an die Menschen ran.
-- Don Alphonso