如何正确制作Gedcom文件?多家庭场景生成失败求助
问题
我用FamilyEcho生成家族图谱,单家庭场景下Gedcom文件正常,但添加第二个家庭后无法生效。附上我的Python代码和生成的Gedcom文件,求正确的Gedcom格式。
我的Python代码
Individuals = [(1, 'James', 'Smith'), (2, 'Jack', 'Smith'), (3, 'John', 'Smith'), (4, 'Jane', 'Smith'), (5, 'Jill', 'Smith')] Families = [(1, 1, 2, 3), (2, 3, 4, 5)] print(Individuals,Families) with open('F.ged','w') as Gedcomfile: for person in Individuals: Gedcomfile.write(f""" 0 @I{person[0]}@ INDI 1 NAME {person[1]} /{person[2]}/ 2 GIVN {person[1]} 2 SURN {person[2]} """) for family in Families: Gedcomfile.write(f""" 0 @F{family[0]}@ FAM 1 HUSB @I{family[1]}@ 1 WIFE @I{family[2]}@ 1 CHIL @I{family[3]}@ """)
生成的Gedcom文件
0 @I1@ INDI 1 NAME James /Smith/ 2 GIVN James 2 SURN Smith 0 @I2@ INDI 1 NAME Jack /Smith/ 2 GIVN Jack 2 SURN Smith 0 @I3@ INDI 1 NAME John /Smith/ 2 GIVN John 2 SURN Smith 0 @I4@ INDI 1 NAME Jane /Smith/ 2 GIVN Jane 2 SURN Smith 0 @I5@ INDI 1 NAME Jill /Smith/ 2 GIVN Jill 2 SURN Smith 0 @F1@ FAM 1 HUSB @I1@ 1 WIFE @I2@ 1 CHIL @I3@ 0 @F2@ FAM 1 HUSB @I3@ 1 WIFE @I4@ 1 CHIL @I5@
解决方案
问题出在Gedcom需要双向关联:你的FAM记录里只定义了家庭和成员的关系,但每个INDI记录缺少对应的家庭关联字段,FamilyEcho依赖这些字段才能正确渲染多家庭关系。
需要给每个个体添加两类关联字段:
1 FAMS @F[ID]@:标记该个体是对应家庭的配偶(丈夫/妻子)1 FAMC @F[ID]@:标记该个体是对应家庭的孩子
修改后的Python代码
Individuals = [(1, 'James', 'Smith'), (2, 'Jack', 'Smith'), (3, 'John', 'Smith'), (4, 'Jane', 'Smith'), (5, 'Jill', 'Smith')] Families = [(1, 1, 2, 3), (2, 3, 4, 5)] # 预先整理每个个体的家庭关联关系 indi_spouse_fams = {} # 个体作为配偶的家庭 indi_child_fams = {} # 个体作为孩子的家庭 for fam_id, husb_id, wife_id, chil_id in Families: # 给丈夫、妻子添加配偶家庭关联 indi_spouse_fams.setdefault(husb_id, []).append(fam_id) indi_spouse_fams.setdefault(wife_id, []).append(fam_id) # 给孩子添加出生家庭关联 indi_child_fams.setdefault(chil_id, []).append(fam_id) with open('F_fixed.ged','w') as Gedcomfile: # 写入个体记录并补充家庭关联 for person in Individuals: pid = person[0] Gedcomfile.write(f"0 @I{pid}@ INDI\n") Gedcomfile.write(f"1 NAME {person[1]} /{person[2]}/\n") Gedcomfile.write(f"2 GIVN {person[1]}\n") Gedcomfile.write(f"2 SURN {person[2]}\n") if pid in indi_spouse_fams: for fam_id in indi_spouse_fams[pid]: Gedcomfile.write(f"1 FAMS @F{fam_id}@\n") if pid in indi_child_fams: for fam_id in indi_child_fams[pid]: Gedcomfile.write(f"1 FAMC @F{fam_id}@\n") Gedcomfile.write("\n") # 写入家庭记录 for family in Families: fam_id, husb_id, wife_id, chil_id = family Gedcomfile.write(f"0 @F{fam_id}@ FAM\n") Gedcomfile.write(f"1 HUSB @I{husb_id}@\n") Gedcomfile.write(f"1 WIFE @I{wife_id}@\n") Gedcomfile.write(f"1 CHIL @I{chil_id}@\n") Gedcomfile.write("\n")
修正后的Gedcom文件
0 @I1@ INDI 1 NAME James /Smith/ 2 GIVN James 2 SURN Smith 1 FAMS @F1@ 0 @I2@ INDI 1 NAME Jack /Smith/ 2 GIVN Jack 2 SURN Smith 1 FAMS @F1@ 0 @I3@ INDI 1 NAME John /Smith/ 2 GIVN John 2 SURN Smith 1 FAMS @F2@ 1 FAMC @F1@ 0 @I4@ INDI 1 NAME Jane /Smith/ 2 GIVN Jane 2 SURN Smith 1 FAMS @F2@ 0 @I5@ INDI 1 NAME Jill /Smith/ 2 GIVN Jill 2 SURN Smith 1 FAMC @F2@ 0 @F1@ FAM 1 HUSB @I1@ 1 WIFE @I2@ 1 CHIL @I3@ 0 @F2@ FAM 1 HUSB @I3@ 1 WIFE @I4@ 1 CHIL @I5@
双向绑定个体与家庭的关系后,FamilyEcho就能正确识别并渲染多家庭结构了。
内容的提问来源于stack exchange,提问作者eRED
相关产品推荐
相关产品推荐

