Использование Python GedCom Parser: получение плохого выхода (экземпляр GEDCOLEMESE ATCORE ATCORE ...)

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

  •  26-09-2019
  •  | 
  •  

Вопрос

Я новичок в Python, и я могу сказать, что BAT мой опыт программирования номинальный по сравнению со многими из вас. Подрезать себя :)

У меня есть 2 файла. Парсер GedCom написан в Python, который я нашел от пользователя на этом сайте (GedCom.py - http://ilab.cs.byu.edu/cs460/2006w/assignments/program1.html.) И простой файл GedCom, который я вытащил из Heiner-eichmann.de/gedcom/gedcom.htm. Угадай, у кого возникли проблемы в размещении 2 и 2 вместе? Этот парень...

Вот кодовый фрагмент, сопровождаемый тем, что я сделал до сих пор.

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

Мой маленький скрипт

Импорт GedCom.
g = gedcom ('c: tmp test.ged') // Я в Windows
Печать g.element_List ()

Отсюда я получаю кучу вывода "Experce incom.element в 0x00 ..."

Я не уверен, почему я получаю этот вывод. Я думал, что в соответствии с методом Element_List - отформатированный список будет возвращен. Я гуглил и ищите этот сайт. Ответ, вероятно, смотрит меня в лицо, но я надеялся, что кто-то может указать на очевидное.

Очень признателен.

Это было полезно?

Решение

someclass instance at 0xdeadbeef является результатом стандарта __repr__ Способ для классов, которые не определяют один, как видимо класс gedcom.Element Не так ли проблема только с вами печатает список таких экземпляров. Если такой класс определяет __str__, вы могли

for x in g.element_list():
    print x

Но если это не так, то это также даст аналогичный вывод (как __str__ «По умолчанию» __repr__). Что вы хотите, чтобы делать с этими элементами, например, метод, который их класс делает предложение?

Другие советы

В этом выходе нет ничего плохого или необычного. Так как gedcom.Element не определен А. __repr__, Печать в списке будет отображаться по умолчанию __repr__. Отказ Если вы хотите получить доступ к конкретному атрибуту на каждом элементе, вы можете попробовать:

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

редактировать: Ага, я посмотрел на источник, который вы предоставили. Это действительно определяет __str__, но нет __repr__. Отказ Вот что вы хотите, скорее всего:

for element in g.element_list()
    print element
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top