百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

DOT 语言是 Graphviz 的脚本语言,我的野心

toyiye 2024-07-02 02:50 28 浏览 0 评论

DOT 语言是 Graphviz 的脚本语言,

输入代码字符串,任何代码转dot ,然后成图

字体文件:/storage/emulated/0/字体/黑体.ttf 保存位置:/storage/emulated/0/print/图片/input图纸/ /storage/emulated/0/print/图片/input图纸/mindmap.xmind
另外保存
/storage/emulated/0/电脑与计算机基础/图片/流程图/dot/
路径保存文件夹,没有就创建

您想要将代码字符串转换为 Graphviz 的 DOT 表示,并生成相应的图表,同时处理字体文件和保存位置的文件夹。由于我无法直接访问外部存储或执行文件系统操作,我将提供一个 Python 脚本示例,您可以在您的本地环境中运行它。这个脚本将执行以下操作:

  1. 检查指定的文件夹是否存在,如果不存在,则创建它们。
  2. 将字体文件从一个位置复制到另一个位置。
  3. 将代码字符串转换为 DOT 表示,并生成图表。
    请确保您已经安装了 Graphviz 和 Python 的
    pydot 库。
import os
import shutil
import pydot
# 字体文件和目标位置的路径
字体文件路径 = "/storage/emulated/0/字体/黑体.ttf"
保存位置路径 = "/storage/emulated/0/print/图片/input图纸/"
mindmap_xmind路径 = os.path.join(保存位置路径, "mindmap.xmind")
dot文件夹路径 = "/storage/emulated/0/电脑与计算机基础/图片/流程图/dot/"
# 检查并创建文件夹
if not os.path.exists(保存位置路径):
    os.makedirs(保存位置路径)
if not os.path.exists(dot文件夹路径):
    os.makedirs(dot文件夹路径)
# 复制字体文件到新位置
shutil.copy(字体文件路径, 保存位置路径)
# 代码字符串
code = '''
def foo():
    print("Hello, World!")
foo()
'''
# 解析代码并创建 AST
parsed_code = ast.parse(code)
# 创建 DOT 图
graph = pydot.Dot(graph_type='digraph')
# 将 AST 转换为 DOT 图
ast_to_dot(parsed_code, graph)
# 保存 DOT 文件
dot_file_path = os.path.join(dot文件夹路径, "code_graph.dot")
graph.write(dot_file_path, format='raw')
# 使用 Graphviz 将 DOT 文件转换为 PNG 图片
png_file_path = os.path.join(保存位置路径, "code_graph.png")
graph.write(png_file_path, format='png')
# 输出完成消息
print("操作完成。文件夹和文件已保存到指定位置。")

请确保您有足够的权限来执行这些操作,特别是在移动或复制文件时。在执行此脚本之前,请替换为您的实际路径。由于我无法在此环境中执行文件系统操作,您需要在您的本地环境中运行此脚本。

Error: /storage/emulated/0/print/图片/input图纸/mindmap.dot: syntax error in line 6 near 'input_code'
convert: unable to open image '/storage/emulated/0/print/图片/input图纸/mindmap.png': No such file or directory @ error/blob.c/OpenBlob/3596.
convert: no images defined `/storage/emulated/0/print/图片/input图纸/mindmap.png' @ error/convert.c/ConvertImageCommand/3362.
cp: cannot stat '/storage/emulated/0/print/图片/input图纸/mindmap.png': No such file or directory
图片生成完成,并保存在以下位置:
/storage/emulated/0/print/图片/input图纸/mindmap.png
/storage/emulated/0/电脑与计算机基础/图片/流程图/dot//input.png
~ $
~ $
~ $
~ $
Error: /storage/emulated/0/print/图片/input图纸/mindmap.dot: syntax error in line 6 near 'input_code'
convert: unable to open image '/storage/emulated/0/print/图片/input图纸/mindmap.png': No such file or directory @ error/blob.c/OpenBlob/3596.
convert: no images defined `/storage/emulated/0/print/图片/input图纸/mindmap.png' @ error/convert.c/ConvertImageCommand/3362.
cp: cannot stat '/storage/emulated/0/print/图片/input图纸/mindmap.png': No such file or directory
图片生成完成,并保存在以下位置:
/storage/emulated/0/print/图片/input图纸/mindmap.png
/storage/emulated/0/电脑与计算机基础/图片/流程图/dot//input.png
~ $
~ $
~ $
~ $

错误信息表明在生成的 DOT 文件中存在语法错误,并且图片文件未能生成,因此无法使用 convert 命令打开或修改它。此外,cp 命令也无法找到要复制的图片文件。解决这些问题的步骤如下:

  1. 确保用户输入的代码是有效的 DOT 语言代码。DOT 语言是 Graphviz 的脚本语言,用于描述图形结构。如果代码中包含语法错误,Graphviz 将无法生成图片。
  2. 检查 dot 命令是否成功执行,并且确保 input_dot_fileoutput_image_path 的路径是正确的。如果 dot 命令失败,不会生成 PNG 图片,这将导致后续的 convertcp 命令失败。
  3. 确保 convert 命令在尝试添加中文字体之前,图片已经成功生成。如果图片不存在,convert 命令将无法执行。
  4. 确保 cp 命令在尝试复制图片之前,图片已经成功生成并且路径正确。
    以下是修改后的脚本,它包括了对错误的处理和检查:
#!/bin/bash
# 用户输入多行代码,按# ? ?结束
input_code=""
while IFS= read -r line; do
    if [[ $line == "# ? ?" ]]; then
        break
    fi
    input_code+="$line"#39;\n'
done
# 确保输入不为空
if [ -z "$input_code" ]; then
    echo "代码不能为空!"
    exit 1
fi
# 创建保存文件的目录,如果不存在
input_dot_file="/storage/emulated/0/print/图片/input图纸/mindmap.dot"
output_image_path="/storage/emulated/0/print/图片/input图纸/mindmap.png"
mkdir -p "$(dirname "$input_dot_file")"
# 将输入的代码写入文件
echo "$input_code" > "$input_dot_file"
# 使用Graphviz生成图片
if dot -Tpng "$input_dot_file" -o "$output_image_path"; then
    echo "图片生成成功。"
else
    echo "Graphviz生成图片失败。请检查DOT文件语法。"
    exit 1
fi
# 添加中文字体到图片上
font_path="/storage/emulated/0/字体/黑体.ttf"
convert "$output_image_path" -font "$font_path" -pointsize 24 -gravity North -annotate +10+10 "示例文字" "$output_image_path"
# 复制图片到另一个目录
destination_folder="/storage/emulated/0/电脑与计算机基础/图片/流程图/dot/"
mkdir -p "$destination_folder"
cp "$output_image_path" "$destination_folder/input.png"
echo "图片生成完成,并保存在以下位置:"
echo "$output_image_path"
echo "$destination_folder/input.png"

在这个脚本中,我添加了对 dot 命令执行结果的检查。如果 dot 命令失败,脚本将打印错误消息并退出。此外,我确保在尝试使用 convert 命令之前,图片已经成功生成。安装了 Graphviz 和 ImageMagick,可以在本地环境中运行此脚本。







当然,以上没有实现,留下标记!

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码