Ich habe Strings wie folgt aus:PyParsing: Ist dies die korrekte Verwendung von setParseAction()?
"MSE 2110, 3030, 4102"
ich ausgeben möchte:
[("MSE", 2110), ("MSE", 3030), ("MSE", 4102)]
Das ist mein Weg, um darüber zu gehen, obwohl ich ziemlich es noch nicht gekommen:
Diese Ausgängedef makeCourseList(str, location, tokens):
print "before: %s" % tokens
for index, course_number in enumerate(tokens[1:]):
tokens[index + 1] = (tokens[0][0], course_number)
print "after: %s" % tokens
course = Group(DEPT_CODE + COURSE_NUMBER) # .setResultsName("Course")
course_data = (course + ZeroOrMore(Suppress(',') + COURSE_NUMBER)).setParseAction(makeCourseList)
:
>>> course.parseString("CS 2110")
([(['CS', 2110], {})], {})
>>> course_data.parseString("CS 2110, 4301, 2123, 1110")
before: [['CS', 2110], 4301, 2123, 1110]
after: [['CS', 2110], ('CS', 4301), ('CS', 2123), ('CS', 1110)]
([(['CS', 2110], {}), ('CS', 4301), ('CS', 2123), ('CS', 1110)], {})
Ist dies der richtige Weg, oder bin ich völlig ausgeschaltet?
Auch die Ausgabe von ist nicht ganz richtig - ich möchte course_data
eine Liste von course
Symbole, die im gleichen Format wie einander sind. Im Moment unterscheidet sich der erste Kurs von den anderen. (Es hat ein {}
, während die andere nicht tun.)
Sie sollten eine Antwort akzeptieren, denke ich. – Donovan