2016-05-24 2 views
0

Я написал программу python для печати каждой строки файла gedcom с его уровнем no и тегом (gedcom - это файл, который в основном является генеалогическим деревом).чтение файлов gedcom и тегов печати

Каждая строка из GEDCOM имеет структуру следующего

<level-number> <tag> <arguments> 

Теперь я не хочу, чтобы все метки должны быть напечатаны, но только определенные теги, которые я добавил в списке key_words и для остального я хочу напечатать «недействителен тег". Теперь проблема заключается в том, что «недопустимый тег» печатается каждый раз, даже если соответствующий тег найден и печатается. В принципе, оператор if выполняется каждый раз.

Как я могу исправить эту проблему? Кроме того, как я могу иметь дело с «INDI» слово, как оно не получает напечатанной

вот мой код

key_words = ['INDI','NAME','SEX','BIRT','DEAT','FAMC','FAMS','FAM','MARR','HUSB','WIFE','CHIL','DIV','DATE','HEAD','TRLR','NOTE'] 
    #opening file 
    text_file = open('C:\Users\shree\Canopy\My-Family-18-May-2016-582.ged', 'r') 

    print "Printing each line of gedcom file followed by level no and tag line" 

    for line in text_file: 
     print "line is:-", line 
     level_number = int(line[:1]) 
     print "Level number is",level_number 
     line = line.split() 
     for word in key_words: 
      if word in line: 
       print "Tage is:-",word,"\n" 
     else: 
      print "invalid tag" 

линии отбора проб

0 HEAD 
1 SOUR Family Echo 
2 WWW http://www.familyecho.com/ 
1 FILE My Family 
1 DATE 18 MAY 2016 
1 DEST ANSTFILE 
1 GEDC 
2 VERS 5.5.1 
2 FORM LINEAGE-LINKED 
1 SUBM @[email protected] 
2 NAME Nico Rosberg 
1 SUBN 
1 CHAR UTF-8 
0 @[email protected] INDI 
1 NAME Nico /Rosberg/ 
2 GIVN Nico 
2 SURN Rosberg 
2 _MARNM Rosberg 
1 SEX M 
1 BIRT 
2 DATE 21 MAR 1989 
1 FAMC @[email protected] 
0 @[email protected] INDI 
1 NAME Tom /Rosberg/ 
2 GIVN Tom 
2 SURN Rosberg 
2 _MARNM Rosberg 
1 SEX M 
1 BIRT 
2 DATE 15 MAR 1958 
1 FAMS @[email protected] 
1 FAMC @[email protected] 
0 @[email protected] INDI 
1 NAME Laisly /Vettle/ 
2 GIVN Laisly 
2 SURN Vettle 
2 _MARNM Rosberg 
1 SEX F 
1 BIRT 
2 DATE 15 SEP 1958 
1 FAMS @[email protected] 
1 FAMC @[email protected] 
+0

Пожалуйста, добавьте некоторые строки из самого файла, например. – AKS

ответ

0

кажется, что вы хотите это:

line_words = line.split() 
# get the first element since that is the tag of line 
line_tag = line_words[1].strip() 

# check if that is present in the keywords 
if line_tag in key_words: 
    print "Tag is:-",line_tag,"\n" 
else: 
    print "invalid tag" 
+0

Разве это не работает для вас? – AKS