python字典画分形树,所遇问题及解决办法 解决遇到的FileNotFoundError问题

前言:

这个是编译原理课设过程中遇到的问题(因为要求画语法树)

我只能说快把我心态搞炸了,这个问题一直被搞了两天多,一直没有解决,现在终于解决,所以特此来写这篇文章,告诉大家解决方法

所遇问题:
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:
错误报告1
错误报告2:
关于dot找不到路径
遇到这两个问题,大家先别急,我也是在网上找了一堆关于他们的解决办法,但是都遇到了门槛,特别是graphviz的下载问题(我之前被难住了,淦),但是在按照下面的步骤安装好graphviz后就都解决了

相关问题解决办法

下载graphviz

官方下载:graphviz官网
注意:官网下载需要连接外网就是所谓的梯子或加速器,在未连接外网的情况下,能打开网站,但反应慢且下载功能一直都是无响应

之前因为这个的官网的下载链接没有找到下载方法,耽误了我很多时间,所以才想起写这篇文章
这里给大家提供自己下载好的压缩包,该资源链接,解压即用
这个是window10系统 32位的,但是我相信各位的电脑都是64位的系统(向下兼容,64位可以运行32位),可以使用这个包,因为笔者的笔记本也是64位的
至于mac和其他系统上的这个包,我没找到,所以我也没有,实在抱歉,若是找到了的话,后面我再来更新

解压后放到一个自己定义的路径下:
我自己放的一个路径:
在这里插入图片描述
记住这个路径,下面配置环境变量会用

配置环境变量

1、此电脑->右键->属性
打开属性界面
2、打开高级系统设置
打开高级系统设置
3、高级->环境变量
环境变量
4、在用户的变量中找到Path 并编辑它
Path编辑
5、新建一个
在这里插入图片描述
6、加入解压后的bin文件的路径:
输入路径7、完成,完成后记得重启一下你的编程软件,比如我重启了自己的pycharm后就能正常运行前面的程序了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿,葱来了-C is coming

老板大气

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值