[英]Processing yEd graphml file in python
我想在 yEd 创建的 graphml 文件中获取所有节点和一些属性(例如标签名称)的列表,而不管它们在图中的位置。 这已经部分处理了( 在 python 中使用 networkx 处理 XML 文件和如何使用 lxml 迭代 GraphML 文件)但不是当你在 yEd 中“分组”节点时 - 我在分组中有很多分组。
已经尝试过 networkx 和 lxml,但没有使用建议的简单方法获得完整的结果集 - 关于优雅的解决方法以及使用哪个库的任何建议,而不是递归遍历树并识别组节点并再次向下钻取。
例子:
当您有分组时,使用 networkx 的非常简单图形的示例输出:
('n0', {})
('n1', {'y': '0.0', 'x': '26.007967509920633', 'label': 'A'})
('n0::n0', {})
('n0::n1', {})
我想你可以试试这个。
根据作者的说法,它是一个 Python 库...
提供了一个简单的界面,可以让您指定图形的外观,并生成可以在 yEd 中打开的相应 graphML。
https://github.com/jamesscottbrown/pyyed
希望这可以帮助!
干杯!
在尝试了 networkx、lxml 和 pygraphml 之后,我决定他们根本不会做这项工作。 我正在使用 BeautifulSoup 并从头开始编写所有内容:
from bs4 import BeautifulSoup
fp = "files/tes.graphml"
with open(fp) as file:
soup = BeautifulSoup(file, "lxml")
nodes = soup.findAll("node", {"yfiles.foldertype":""})
groups = soup.find_all("node", {"yfiles.foldertype":"group"})
edges = soup.findAll("edge")
然后你会得到这样的结果:
print " --- Groups --- "
for group in groups:
print group['id']
print group.find("y:nodelabel").text.strip()
print " --- Nodes --- "
for node in nodes:
print node['id']
print node.find("y:nodelabel").text.strip()
这应该能让你继续前进。 您可以创建组、节点和边缘对象并将它们用于某些处理。
我可能会开源我正在开发的库,因为它的用途不仅仅是解析图形。
和输出:
--- Groups ---
n0 / SimpleApp
--- Nodes ---
n0::n0 / main
n0::n1 / say hello
n1 / Exit
--- Edges ---
n0::e0 / n0::n0 / n0::n1 / str:username, int:age
e0 / n0::n1 / n1 / None
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.