You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确制作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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 02:10:54