7
votes

PYPARSING: est-ce une utilisation correcte de la mise en place ()?

J'ai des chaînes comme ceci:

>>> 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)], {})


1 commentaires

Vous devriez accepter une réponse, je pense.


4 Réponses :


5
votes

Est-ce la bonne façon de le faire, ou je suis Je désactive totalement? P>

C'est une façon de le faire, bien que, bien sûr, il existe d'autres (par exemple, utilisez-le comme des actions d'analyse à deux méthodes liées - donc l'instance que la méthode appartient à peut conserver l'état - un pour le code du département et un autre pour le numéro de cours ). P>

La valeur de retour du Parsestring code> L'appel est plus difficile à plier à votre volonté (bien que je sache suffisamment la magie sombre le fera et j'attends avec impatience Paul McGuire expliquant Comment ;-), alors pourquoi ne pas aller la voie à la méthode liée comme dans ...: p> xxx pré>

Ceci émet: p>

before: [['CS', '2110'], '4301', '2123', '1110']
after: [('CS', '2110'), ('CS', '4301'), ('CS', '2123'), ('CS', '1110')]
[('CS', '2110'), ('CS', '4301'), ('CS', '2123'), ('CS', '1110')]


0 commentaires

16
votes

Cette solution mémorise le département lorsqu'il est analysé et émet un tuple (dept, coursenum) lorsqu'un numéro est trouvé.

[('MSE', 2110), ('MSE', 3030), ('MSE', 4102), ('CSE', 1000), ('CSE', 2000), ('CSE', 3000)]


0 commentaires

-1
votes

Bien sûr, tout le monde aime pymparsing . Pour des choses faciles comme cette division, c'est tellement plus facile à faciliter la grok: xxx


0 commentaires

-1
votes
data = '''\
MSE 2110, 3030, 4102
CSE 1000, 2000, 3000'''

def get_courses(data):
    for row in data.splitlines():
        department, *numbers = row.replace(",", "").split()
        for number in numbers:
            yield department, number
This would give a generator for the course codes. A list can be made with list() if need be, or you can iterate over it directly.

0 commentaires