ฉันสร้างต้นไม้ด้วยห้องสมุด anytree ฉันต้องการที่จะแก้ไขมัน จากนั้นจึงส่งออก - บันทึกลงดิสก์ และนำเข้ากลับพร้อมกับการแก้ไข ตัวอย่างเช่น ต้นไม้ตัวอย่าง:
udo = Node("Udo")
marc = Node("Marc", parent=udo)
lian = Node("Lian", parent=marc)
dan = Node("Dan", parent=udo)
jet = Node("Jet", parent=dan)
jan = Node("Jan", parent=dan)
joe = Node("Joe", parent=dan)
Udo
├── Marc
│ └── Lian
└── Dan
├── Jet
├── Jan
└── Joe
ฉันสามารถแก้ไขได้ เช่น ตัด Dan ออกและเพิ่มลูกๆ ให้กับ Marc
dan.parent = None
bonny = Node ("Bonny", parent = marc)
Udo
└── Marc
├── Lian
└── Bonny
แต่เมื่อฉันส่งออกแผนผังไปยัง json แล้วนำเข้ากลับ โหนดเดียวที่ฉันดูเหมือนจะสามารถอ้างอิงได้คือรูท ดังนั้นฉันจึงไม่สามารถแก้ไขประเภทนี้ได้อีกต่อไปเนื่องจากไม่มีชื่อตัวแปรเช่น dan
หรือ marc
นั่นก็คือ ฉันไม่พบวิธีอ้างอิงโหนด ฉันขาดอะไรไปหรือเปล่า?
with open ('cajon/anytreeexample.json', 'r+', encoding = 'utf-8') as f:
datos = importer.read(f)
print (datos)
ซึ่งหมายความว่าหลังจากนำเข้าแผนผังสิ่งที่คุณมีเป็นเพียงโหนดรูท
AnyNode(name='Udo') # Udo is the root
จากที่นี่คุณสามารถรับลูกของ Udo และลูก ๆ ของลูก ๆ ก็ชอบ
marc, dan = udo.children
lian = marc.children
jet, jan, joe = dan.children
แต่พวกเขาไม่ได้ทำงานเป็นโหนด
print (lian.parent)
AttributeError: 'tuple' object has no attribute 'parent'
และดูเหมือนว่าคุณไม่สามารถแนบเด็กเข้ากับพวกเขาได้ ซึ่งเป็นจุดประสงค์หลักของฉันในโครงสร้างนี้:
sonny = AnyNode("Sonny", parent = lian)
TypeError: __init__() got multiple values for argument 'parent'
คำถามของฉันคือ มีวิธีโหลดแผนผัง json ที่บันทึกไว้ลงในโครงสร้าง anytree ที่เหมาะสม ซึ่งคุณสามารถต่อท้ายโหนดใหม่ได้หรือไม่
variable = value
ซึ่งไม่มีวิธีอื่น ดูเหมือนว่าบางอันไม่ทำงานเนื่องจากโหนด.children
ส่งคืนทูเพิล ไม่ใช่โหนด และดูเหมือนว่าฉันก็ไม่รู้จะเพิ่มลูกอย่างไร แล้วsonny = Node("Sonny", parent = dan)
ล่ะ? - person Stop harming Monica   schedule 18.08.2018.children
ส่งคืน tuple ของโหนดเสมอ การส่งออกไม่เกี่ยวอะไรกับโหนดนั้น หากต้องการต่อท้ายnewnode
ใต้nodeX
สมมติว่าทั้งnewnode
และnodeX
เป็นโหนด คุณเพียงแค่ทำnewnode.parent = nodeX
- person Stop harming Monica   schedule 18.08.2018,
- person Fabian N.   schedule 18.08.2018