前言:
这个是编译原理课设过程中遇到的问题(因为要求画语法树)
我只能说快把我心态搞炸了,这个问题一直被搞了两天多,一直没有解决,现在终于解决,所以特此来写这篇文章,告诉大家解决方法
所遇问题:
File “E:\QC\pycharm\BYYL\venv\lib\site-packages\graphviz_compat.py”, line 62, in stderr_write_bytes
sys.stderr.write(data.decode(encoding))
UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xb2 in position 6: invalid start byte
1、找不到文件
File “E:\QC\py 3.7.9\lib\subprocess.py”, line 1207, in _execute_child
startupinfo)
FileNotFoundError: [WinError 2] 系统找不到指定的文件。
2、找不到路径
File “E:\QC\pycharm\BYYL\venv\lib\site-packages\pydot.py”, line 1933, in create
raise OSError(*args)
FileNotFoundError: [WinError 2] “dot” not found in path.
成果展示
先给大家画个饼,看看最后的成果:
字典内容:
menu = {'dinner':
{'chicken':'good',
'beef':'average',
'vegetarian':{
'tofu':'good',
'salad':{
'caeser':'bad',
'italian':'average'}
},
'pork':'bad'}
}
根据字典内容生成的图片:
自己写的复杂的字典内容:
实现代码
原文章:https://stackoverflow.com/questions/13688410/dictionary-object-to-decision-tree-in-pydot
代码改进如下:
提醒:下面导入的pydot
库,需要自己安转,install安装就行,pycharm软件使用了这么久了 这个应该难不倒大家
import pydot
menu = {'dinner':
{'chicken':'good',
'beef':'average',
'vegetarian':{
'tofu':'good',
'salad':{
'caeser':'bad',
'italian':'average'}
},
'pork':'bad'}
}
def draw(parent_name, child_name):
edge = pydot.Edge(parent_name, child_name)
graph.add_edge(edge)
def visit(node, parent=None):
for k,v in node.items(): #改进点
if isinstance(v, dict):
# We start with the root node whose parent is None
# we don't want to graph the None node
if parent:
draw(parent, k)
visit(v, k)
else:
draw(parent, k)
# drawing the label using a distinct name
draw(k, k+'_'+v)
graph = pydot.Dot(graph_type='graph')
visit(menu)
#下面二者根据自己需求使用
graph.write_png('tree.png') #最后结果生成png图片格式
#graph.write_pdf('tree.pdf') #最后结果生成pdf
代码是没有问题的,且最后我也运行成功了 我所用python版本是python3.7
其实也没多少改进:
原来的代码直接运行会提示:AttributeError: ‘dict’ object has no attribute ‘iteritems’ 是因为 python 3中重命名为dict.iteritems -> dict.items 所以将iteritems改为了items
后期改进:画树类的封装,含讲解构造深层嵌套的字典
所遇问题
错误报告1:
错误报告2:
遇到这两个问题,大家先别急,我也是在网上找了一堆关于他们的解决办法,但是都遇到了门槛,特别是graphviz的下载问题(我之前被难住了,淦),但是在按照下面的步骤安装好graphviz后就都解决了
相关问题解决办法
下载graphviz
官方下载:graphviz官网
注意:官网下载需要连接外网就是所谓的梯子或加速器,在未连接外网的情况下,能打开网站,但反应慢且下载功能一直都是无响应
之前因为这个的官网的下载链接没有找到下载方法,耽误了我很多时间,所以才想起写这篇文章
这里给大家提供自己下载好的压缩包,该资源链接,解压即用
这个是window10系统 32位的,但是我相信各位的电脑都是64位的系统(向下兼容,64位可以运行32位),可以使用这个包,因为笔者的笔记本也是64位的
至于mac和其他系统上的这个包,我没找到,所以我也没有,实在抱歉,若是找到了的话,后面我再来更新
解压后放到一个自己定义的路径下:
我自己放的一个路径:
记住这个路径,下面配置环境变量会用
配置环境变量
1、此电脑->右键->属性
2、打开高级系统设置
3、高级->环境变量
4、在用户的变量中找到Path 并编辑它
5、新建一个
6、加入解压后的bin文件的路径:
7、完成,完成后记得重启一下你的编程软件,比如我重启了自己的pycharm后就能正常运行前面的程序了