L'utilisation d'un analyseur GEDCOM Python: Réception d'une mauvaise sortie (par exemple gedcom.Element à 0x00 ...)

StackOverflow https://stackoverflow.com/questions/3623349

  •  26-09-2019
  •  | 
  •  

Question

Je suis nouveau à Python, et je peux dire la chauve-souris mon expérience de programmation est minime par rapport à beaucoup d'entre vous. Accrochez-vous :)

J'ai 2 fichiers. Un analyseur GEDCOM écrit en Python que j'ai trouvé d'un utilisateur sur ce site (gedcom.py - http://ilab.cs.byu.edu/cs460/2006w/assignments/program1.html ) et un simple fichier GEDCOM que j'ai tiré de heiner-eichmann.de/gedcom/gedcom.htm . Devinez qui ayant du mal à mettre 2 et 2 ensemble? Ce gars-là ...

Voici un extrait de code suivi par ce que je l'ai fait jusqu'à présent.

class Gedcom:
""" Gedcom parser

This parser is for the Gedcom 5.5 format.  For documentation of
this format, see

http://homepages.rootsweb.com/~pmcbride/gedcom/55gctoc.htm

This parser reads a GEDCOM file and parses it into a set of
elements.  These elements can be accessed via a list (the order of
the list is the same as the order of the elements in the GEDCOM
file), or a dictionary (the key to the dictionary is a unique
identifier that one element can use to point to another element).

"""

def __init__(self,file):
    """ Initialize a Gedcom parser. You must supply a Gedcom file.
    """
    self.__element_list = []
    self.__element_dict = {}
    self.__element_top = Element(-1,"","TOP","",self.__element_dict)
    self.__current_level = -1
    self.__current_element = self.__element_top
    self.__individuals = 0
    self.__parse(file)

def element_list(self):
    """ Return a list of all the elements in the Gedcom file.  The
    elements are in the same order as they appeared in the file.
    """
    return self.__element_list

def element_dict(self):
    """ Return a dictionary of elements from the Gedcom file.  Only
    elements identified by a pointer are listed in the dictionary.  The
    key for the dictionary is the pointer.
    """
    return self.__element_dict

mon petit script

import

GEDCOM
g = Gedcom ( 'C: \ tmp \ test.ged') // Je suis sous Windows
imprimer g.element_list ()

A partir de là, je reçois un tas de sortie "instance gedcom.Element à 0x00 ..."

Je ne sais pas pourquoi je reçois cette sortie. Je pensais que selon la méthode element_list une liste formatée serait renvoyé. J'ai googlé et rechercher ce site. La réponse est sans doute me regarder en face, mais j'espérais que quelqu'un pourrait souligner l'évidence.

PRÉCIEUSE.

Était-ce utile?

La solution

someclass instance at 0xdeadbeef est le résultat de la méthode standard de __repr__ pour les classes qui ne définissent pas, comme apparemment gedcom.Element de classe n'a pas, de sorte que le problème est seulement avec vous l'impression d'une liste de ces instances. Si ces classes définit __str__, vous pourriez

for x in g.element_list():
    print x

mais si elle ne le fait pas, ce sera également un résultat similaire (comme __str__ « par défaut » __repr__). Que voulez-vous à faire avec ces éléments, par exemple une méthode qui leur classe fait offre?

Autres conseils

Il n'y a rien de mal ou d'inhabituel à cette sortie. Parce que gedcom.Element n'a pas défini __repr__, l'impression de la liste affiche le __repr__ par défaut. Si vous voulez accéder à un attribut particulier sur chaque élément, vous pouvez essayer:

print [element.some_attribute for element in g.element_list()]

modifier: Aha, je regardais sur la source que vous avez fourni. Il ne définit en effet un __str__, mais pas __repr__. Voici ce que vous voulez, le plus probable:

for element in g.element_list()
    print element
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top