疯狂刷题python版 | 使用PySide6自制刷题软件【源码+解析】

news2024/11/27 14:35:34

疯狂刷题python版 | 使用PySide6自制刷题软件【源码+解析】

    • 一、前言
    • 二、思考
    • 三、软件设计
    • 四、软件实现
      • (一)使用QWebEngineView控件通过JavaScript代码和chrome内核进行数据交互和逻辑控制
      • (二)用户分别通过浏览器 GUI和PySide6 GUI进行操作
      • (三)使用PySide6 GUI获取用户计算机本地资源
    • 五、遇到问题及解决方案
      • (一)如何把excel数据转换成json数据?
      • (二)如何向chrome内核传递带大量json数据参数的JavaScript代码?
      • (三)如何区分不同的题库,同样的题库只保存一份?
      • (四)如何保存来自浏览器GUI的答题数据,同样的答题记录只保存一份,并与对应的题库关联?
    • 六、完整源代码和可执行程序

一、前言

考试作为一种衡量个人知识和技能水平的评估方式,已融入了我们的工作和生活。求学时期,从幼儿园到高中、大学,每个教育阶段都免不了考试;工作前后,考试以笔试、面试等形式频繁出现,并作为企业选拔和晋升的主要依据;生活中,我们的驾驶证,一些行业专业资格,也是通过考试获取。

在此过程中,复习题库成了大家通过考试的重要法宝,但大多数行业、政企提供的复习题库多是word、excel等文档形式,复习起来效率不高,由此催生出了各类刷题网站、软件、手机app等工具。这些工具提供了导入题库、保存历史答题记录、错题本、标记重点、答题分析评估等功能,极大提高了考试的复习效率和通过率。

这里先放放程序运行效果,如下图:
在这里插入图片描述
在这里插入图片描述

二、思考

最近在学习PySide6开发,在学习到QT的QWebEngineView控件时,发现PySide6提供了比较完整的浏览器控件支持,而在2017年博主也使用过HTML+JavaScript+IE浏览器AX控件开发了HTML版的刷题工具,但当时没学Python所以只能在IE浏览器中运行。JavaScript|免费导入题库,考试复习工具,刷题神器,支持导入excel题库

缕一缕思路,如使用PySide6提供的QWebEngineView控件改造原来的刷题程序,基于HTML+JavaScript做界面(第一层)UI,基于PySide6 GUI做控制(第二层)UI,使用Python做算法逻辑开发,就能实现类似electron的能力,使得python开发也能利用HTML+JavaScript+CSS海量的UI界面的资源。

三、软件设计

根据以上思路,对原来写的程序设计进行了调整,得到一下程序实现方式简图,这个图是用Markdown提供的mermaid流程图做的,感觉还是挺厉害的,感觉有时间要好好研究一下Markdown。只要简单写写mermaid脚本,就可生成以下简洁明了的流程图。

程序实现方式
signal
JavaScript
Json
chrome内核
浏览器 GUI
HTML+CSS+JavaScript
PySide6 GUI
python
QWebEngineView控件
题库数据文件
用户

四、软件实现

(一)使用QWebEngineView控件通过JavaScript代码和chrome内核进行数据交互和逻辑控制

runJavaScript()函数可以在QWebEngineView或QWebEnginePage对象上调用,以在 Web页面上执行JavaScript代码。它接受一个字符串参数,该字符串是要执行的JavaScript代码。

在PySide6中可以使用以下Python代码向浏览器发送待执行的JavaScript脚本(带参)。self.webEngineView.page().runJavaScript(js_string, 0, js_callback)中js_string是需要执行的JavaScript脚本,js_callback是回调函数,若浏览器执行代码成功则调用js_callback代码。

    self.js_Button = QPushButton()
    self.js_Button.setText('运行JS脚本')
    self.js_Button.clicked.connect(self.run_js)

    def run_js(self):

        js_string, ok = QInputDialog.getMultiLineText(self, "请输入JS脚本", "可输入多行脚本", '')

        def js_callback(result):
            if result != '':
                QMessageBox.information(self, "JS脚本返回信息", str(result))
                self.statusBar().showMessage(f'成功执行JS脚本')

        self.webEngineView.page().runJavaScript(js_string, 0, js_callback)

(二)用户分别通过浏览器 GUI和PySide6 GUI进行操作

在该程序中,用户使用浏览器GUI进行题目选择、答题、提交答卷等点击交互操作,这里使用HTML+JavaScript+CSS实现交互界面的设计、渲染和浏览器内部逻辑处理。如以下JavaScript脚本,用以判断用户选择的答案是否正确。

JavaScript代码:

	function chooseAnswer() {
		let A = '';
		let B = '';
		let C = '';
		let D = '';
		let valueA = document.getElementById("radioA").checked;
		let valueB = document.getElementById("radioB").checked;
		let valueC = document.getElementById("radioC").checked;
		let valueD = document.getElementById("radioD").checked;
		if (valueA === true) {
			A = 'A';
		}
		if (valueB === true) {
			B = 'B';
		}
		if (valueC === true) {
			C = 'C';
		}
		if (valueD === true) {
			D = 'D';
		}

		let user_choose_answer = A + B + C + D;
		let daan = ti_ku.ti_mu[user_choose_number - 1].daan;
		let x = user_choose_answer.toLowerCase();
		let y = daan.toLowerCase();
		answers[user_choose_number - 1] = user_choose_answer;
		if (x === y) {
			alert('回答正确');
			fen_shu[user_choose_number - 1] = 1;
			if_answer[user_choose_number - 1] = 1;
		} else {
			alert('回答错误');
			fen_shu[user_choose_number - 1] = 0;
			if_answer[user_choose_number - 1] = 1;
		}
	}

该程序使用PySide6 GUI进行导入题库、保存答题记录、查看历史答题等交互操作,由于这些操作需要使用用户计算机本地资源,所以应使用python代码进行逻辑控制。如以代码,实现保存本次用户答题记录。

Python代码:

    def submit_answer_js(self):

        def js_callback(result):
            # js返回的本轮答题json结果,写入本地系统文件,并以系统用户名+时间.js形式保存在history文件夹中
            if result != '':
                js_result = str(result)
                save_dir = self.environment["answer_record_dir"] + os.path.sep + self.environment[
                    "cur_question_bank_id"]
                save_file_name = save_dir + os.path.sep + datetime.now().strftime(
                    '-%Y-%m-%d %H-%M-%S') + '.js'
                print(self.environment["cur_question_bank_id"])
                if not os.path.exists(save_dir):
                    os.makedirs(save_dir)
                f = open(save_file_name, 'w', encoding='utf-8')
                f.write(js_result)
                f.close()
                self.statusBar().showMessage(f'已保存本次答题记录,如想查看历史答题记录可点"查看答题历史"按钮')

        if self.environment["cur_question_bank_id"] != '':
            self.webEngineView.page().runJavaScript("submit()", 0, js_callback)
        else:
            self.statusBar().showMessage(f'请先导入题库')

(三)使用PySide6 GUI获取用户计算机本地资源

由于安全问题,一般情况下浏览器是禁止直接获取用户计算机本地资源的,因此浏览器GUI无法通过JavaScript代码来获取存储在用户计算机中的题库。在该程序中,我们使用PySide6 GUI控件QFileDialog,通过编写Python代码来获取题库文件路径,接着使用os库读取题库数据。如以下python代码,实现获取题库文件路径,并读取excel题库文件数据传递到浏览器中。

Python代码:

    def import_question_bank(self):

        def js_callback(result):
            if result != '':
                self.statusBar().showMessage(f'成功导入选中题库')

        file_name, ok = QFileDialog.getOpenFileName(self, caption='Open file', dir=os.path.abspath('.'),
                                                    filter="(*.xls)")
        if file_name != "":
            excel_data = excel2json.read_excel_to_json(file_name)
            # 根据内容生成唯一哈希码,并用该哈希码作为题库文件名,用于未来区分导入的是那一份题库
            save_file_name = hashlib.sha256(excel_data.encode()).hexdigest()
            self.environment["cur_question_bank_id"] = save_file_name
            json_save_path = self.environment["question_bank_dir"] + os.path.sep + save_file_name + '.js'
            # 判断目录是否存在,不存在则新增
            if not os.path.exists(self.environment["question_bank_dir"]):
                os.makedirs(self.environment["question_bank_dir"])
            # 写入json格式内容,并保存为js文件
            encoded_data = base64.b64encode(excel_data.encode("gbk"))
            f = open(json_save_path, 'w', encoding='gbk')
            f.write(encoded_data.decode("gbk"))
            f.close()
            self.statusBar().showMessage(f'成功加载选中题库')

            self.webEngineView.page().runJavaScript(
                "init('{}','{}');".format(self.environment["cur_question_bank_id"], encoded_data.decode("gbk")), 0,
                js_callback)
        else:
            self.statusBar().showMessage(f'导入题库失败,未选择文件或文件格式错误,当前仅支持xls格式')

五、遇到问题及解决方案

(一)如何把excel数据转换成json数据?

该程序的一个主要功能是导入本地题库,题库文件格式一般为:xls、xlsx、word、pdf等。但word和pdf文件涉及图像识别,实现起来比较复杂,所以博主这里只实现了xls和xlsx格式的导入功能。另外,由于后续需用浏览器GUI进行界面渲染,所以导入题库的数据最终应转成json格式,以便在浏览器环境中开展数据处理

excel格式数据转json格式数据博主之前也研究过,并写过一个python小脚本,所以这里直接拿来微调使用即可。具体实现可以参考下面这篇文章。Python|excel表格数据一键转json格式小工具|支持xlsx、xls格式转json|【源码+解析】

(二)如何向chrome内核传递带大量json数据参数的JavaScript代码?

上文提到,在PySide6中,可用webEngineView.page().runJavaScript()方法向浏览器传递待执行的JavaScript脚本。

查阅PySide6资料发现webEngineView的page()方法返回QWebEnginePage()对象,该对象拥有runJavaScript()方法,可以异步向浏览器发送js代码。

但该方法好像只支持传递字符串,不支持传递对象。因此,基于当前的对该方法的理解,只能把需向浏览器传递的脚本和数据都统一封装成一段完整代码字符串,再执行该方法。这过程还涉及统一字符串编码、保证JavaScript语法正确等问题,需要使用base64、encode等方法进行数据传递前后的编码处理,通过一系列编码转换,最终实现把题库中的大量excel数据传递至浏览器并处理,主要代码如下。

Python代码:

    def import_question_bank(self):

        def js_callback(result):
            if result != '':
                self.statusBar().showMessage(f'成功导入选中题库')

        file_name, ok = QFileDialog.getOpenFileName(self, caption='Open file', dir=os.path.abspath('.'),
                                                    filter="(*.xls)")
        if file_name != "":
            excel_data = excel2json.read_excel_to_json(file_name)
            # 根据内容生成唯一哈希码,并用该哈希码作为题库文件名,用于未来区分导入的是那一份题库
            save_file_name = hashlib.sha256(excel_data.encode()).hexdigest()
            self.environment["cur_question_bank_id"] = save_file_name
            json_save_path = self.environment["question_bank_dir"] + os.path.sep + save_file_name + '.js'
            # 判断目录是否存在,不存在则新增
            if not os.path.exists(self.environment["question_bank_dir"]):
                os.makedirs(self.environment["question_bank_dir"])
            # 写入json格式内容,并保存为js文件
            encoded_data = base64.b64encode(excel_data.encode("gbk"))
            f = open(json_save_path, 'w', encoding='gbk')
            f.write(encoded_data.decode("gbk"))
            f.close()
            self.statusBar().showMessage(f'成功加载选中题库')

            self.webEngineView.page().runJavaScript(
                "init('{}','{}');".format(self.environment["cur_question_bank_id"], encoded_data.decode("gbk")), 0,
                js_callback)
        else:
            self.statusBar().showMessage(f'导入题库失败,未选择文件或文件格式错误,当前仅支持xls格式')

功能实现后对应的软件截图:
在这里插入图片描述

(三)如何区分不同的题库,同样的题库只保存一份?

hashlib.sha256是Python的一个内置模块,用于计算信息的SHA-256哈希值。这是一个计算机加密哈希函数的实例,它可以用于验证数据的完整性,或者生成数据的唯一哈希值。

该程序一开始只考虑到用户只导入一个题库进行复习,但如果用户导入第二份题库就会覆盖第一次导入的题库。为了解决该问题,使得程序支持多题库导入,首先要解决如何确保导入的题库具有唯一的标识,无论用户后续导入多少份、多少次题库,程序都可自动对题库进行去重,只保留不重复题库。博主这里使用python的hashlib库sha256()方法,使用题库内容生成唯一哈希码,并以此哈希码作为题库.js文件名,用以保证唯一性

Python代码:

        if file_name != "":
            excel_data = excel2json.read_excel_to_json(file_name)
            # 根据内容生成唯一哈希码,并用该哈希码作为题库文件名,用于未来区分导入的是那一份题库
            save_file_name = hashlib.sha256(excel_data.encode()).hexdigest()
            self.environment["cur_question_bank_id"] = save_file_name
            json_save_path = self.environment["question_bank_dir"] + os.path.sep + save_file_name + '.js'
            # 判断目录是否存在,不存在则新增
            if not os.path.exists(self.environment["question_bank_dir"]):
                os.makedirs(self.environment["question_bank_dir"])
            # 写入json格式内容,并保存为js文件
            encoded_data = base64.b64encode(excel_data.encode("gbk"))
            f = open(json_save_path, 'w', encoding='gbk')
            f.write(encoded_data.decode("gbk"))
            f.close()
            self.statusBar().showMessage(f'成功加载选中题库')

            self.webEngineView.page().runJavaScript(
                "init('{}','{}');".format(self.environment["cur_question_bank_id"], encoded_data.decode("gbk")), 0,
                js_callback)
        else:
            self.statusBar().showMessage(f'导入题库失败,未选择文件或文件格式错误,当前仅支持xls格式')

功能实现后对应的软件截图:
在这里插入图片描述

(四)如何保存来自浏览器GUI的答题数据,同样的答题记录只保存一份,并与对应的题库关联?

strftime()是“string format time”的缩写,主要用于格式化日期时间对象为自定义的字符串表示形式。

支持多题库导入,衍生除了另外一个新问题,当用户读取答题记录与当前所选题库不对应时,界面会出现显示错乱的BUG。因此,在每次保存答题记录、查看历史答题记录时应进行校验,保证答题记录和题库一一对应。这里有几个关键点:①用户的答题结果;②用户当前选择的题库;③当前的系统时间。需做以下几个操作:①把用户的答题结果转换成json格式字符串,用于保存为.js格式文件;②获取当前用户选择题库的哈希码,用于建立对应的答题记录一级目录,并以该哈希码命名目录;③获取当前系统时间,使用strftime()将系统时间转换成年月日时分秒格式,并以该格式命名答题记录.js文件的文件名。以下是参考代码:

JavaScript代码:

function submit() {
		let x = 0;
		let y = 0;
		for (let i = 0; i < ti_ku.number; i++) {
			x = x + fen_shu[i];
			y = y + if_answer[i];
		}
		alert('正确题数:' + x + '\n错误题数:' + (y - x) + '\n未作答:' + (ti_ku.number - y) );
		let de_fen = new Object();
		de_fen.answers=answers;
		de_fen.fen_shu=fen_shu;
		de_fen.if_answer=if_answer;
        return JSON.stringify(de_fen);
        de_fen = null
	}

Python代码:

    def submit_answer_js(self):

        def js_callback(result):
            # js返回的本轮答题json结果,写入本地系统文件,并以系统用户名+时间.js形式保存在history文件夹中
            if result != '':
                js_result = str(result)
                save_dir = self.environment["answer_record_dir"] + os.path.sep + self.environment[
                    "cur_question_bank_id"]
                save_file_name = save_dir + os.path.sep + datetime.now().strftime(
                    '-%Y-%m-%d %H-%M-%S') + '.js'
                print(self.environment["cur_question_bank_id"])
                if not os.path.exists(save_dir):
                    os.makedirs(save_dir)
                f = open(save_file_name, 'w', encoding='utf-8')
                f.write(js_result)
                f.close()
                self.statusBar().showMessage(f'已保存本次答题记录,如想查看历史答题记录可点"查看答题历史"按钮')

        if self.environment["cur_question_bank_id"] != '':
            self.webEngineView.page().runJavaScript("submit()", 0, js_callback)
        else:
            self.statusBar().showMessage(f'请先导入题库')

功能实现后对应的软件截图:
在这里插入图片描述

六、完整源代码和可执行程序

到这里,对原来的纯HTML+JavaScript+CSS刷题程序的PySide6改造基本完成了,实现了文章开头所说的几个主要功能:
①导入题库功能,支持xlsx和xls格式;
②支持多题库导入及选择;
③支持保存答题记录;
④支持查看历史答题记录;
⑤界面由HTML+CSS实现,支持选题、标记正确、错误、未答题目、统计答题情况;
⑥逻辑由Python+JavaScript代码实现。

如果未来有时间还会继续研究和优化该程序。
以下是该Python程序的可执行文件下载地址:
疯狂刷题软件python版 - 使用PySide6自制刷题软件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1845167.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

秋招突击——6/19——复习{(单调队列优化)——最大子序列和,背包问题——宠物小精灵收服问题}——新作{两两交换链表中的节点}

文章目录 引言复习单调队列优化——最大子序列和思路分析实现代码参考实现 背包问题——宠物小精灵的收服问题个人实现参考实现 新作两两交换链表中的节点个人实现参考实现 删除有序数组中的重复项个人实现知识补全迭代器的访问和控制vector删除特定的元素erasevector底层删除元…

15-JS封装:入口函数

目录 1 模块化的基本结构 2 编写封装里的jQuery函数 2.1 对象本身上添加css方法 2.2 对象原型上添加css方法 2.3 自定义构造函数 2.4 优化1-伪数组 2.5 优化2-原型链 2.6 简化代码 需求&#xff1a;给页面中所有的div设置字体颜色为红色 jQuery封装&#xff1a;$("…

1964springboot VUE 智慧社区可视化平台系统开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot VUE社区可视化平台系统是一套完善的完整信息管理类型系统&#xff0c;结合springboot框架和VUE完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用springboot框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码…

INFINI Labs 助力开源与教育:免费许可证计划全面升级

在数字化浪潮席卷全球的今天&#xff0c;INFINI Labs 深刻认识到开源项目和教育机构在技术创新与人才培养中的核心作用。因此&#xff0c;我们郑重推出全新升级的免费许可证计划&#xff0c;旨在全球范围内为开源社区和教育界提供有力支持&#xff0c;共同推动软件生态的繁荣与…

策略模式编程

接口定义&#xff1a; public interface ProcessParserStrategy { List<ProcessInfo> parser(String osType, String processInfo); String getApp(); } public interface ConfigParserStrategy { List<ConfigInfo> parser(String configInfo); String getConfigT…

DC/AC电源模块:为通信设备提供稳定的电力供应

BOSHIDA DC/AC电源模块&#xff1a;为通信设备提供稳定的电力供应 在现代通信系统中&#xff0c;稳定可靠的电力供应是确保信息传输连续性和服务质量的关键因素之一。DC/AC电源模块作为通信设备能源管理的核心组件&#xff0c;扮演着至关重要的角色。它不仅负责将输入的直流电…

Spring自定义标签体系和应用

我们知道&#xff0c;在使用Dubbo框架时&#xff0c;需要指定配置文件中的application、protocol、registry、provider、service等服务器端和客户端的配置项&#xff0c;典型的配置方法如下所示。通过这些配置项&#xff0c;我们可以基于Spring容器来启动Dubbo服务。 <!-- …

pytorch lighting: Trying to resize storage that is not resizable

问题 在用pytorch lighting进行训练时碰到如下错误 即 Trying to resize storage that is not resizable 。 解决方案 在dataloader采样图片以及label时&#xff0c;保证每次采样的图片的分辨率不变。

抖去推,筷子剪辑,超级编导短视频矩阵系统,应该怎么选择?

选择一个适合您需求的软件平台&#xff0c;然后按照以下步骤进行选择&#xff1a; 研究和比较不同平台&#xff1a;比较不同的短视频编辑软件&#xff0c;例如抖音、快手等&#xff0c;看看它们提供了哪些功能和特点。 确定需求&#xff1a;确定您希望在短视频中实现的功能和效…

每天写java到期末考试(6.21)--集合4--练习--6.20

练习1&#xff1a; 正常写集合 bool类 代码&#xff1a; import QM_Fx.Student;import java.util.ArrayList;public class test {public static void main(String[] args) {ArrayList<Student> listnew ArrayList<>();//2.创建学生对象Student s1new Student(&quo…

C语言 | Leetcode C语言题解之第169题多数元素

题目&#xff1a; 题解&#xff1a; int majorityElement(int* nums, int numsSize) {int ans 0;for (int i 0, cnts 0; i < numsSize; i) {if (nums[i] ans) {cnts;} else if (cnts 0) {ans nums[i];} else {cnts--;}}return ans; }

python逆序输出IP地址 青少年编程电子学会python编程等级考试三级真题解析2021年12月

python逆序输出IP地址 2021年12月 python编程等级考试级编程题 一、题目要求 1、编程实现 请读取文件IP.txt的数据&#xff0c;数据内容如下图显示&#xff0c;文件中每一行存储一个P地址&#xff0c;下列代码实现了读取数据&#xff0c;每次读取一行数据&#xff0c;都删除…

HTTP详细总结

概念 HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff0c;规定了浏览器和服务器之间数据传输的规则。 特点 基于TCP协议: 面向连接&#xff0c;安全 TCP是一种面向连接的(建立连接之前是需要经过三次握手)、可靠的、基于字节流的传输层通信协议&#xff0c;在…

驾校OBD接入CAN总线数据大众朗逸仪表网关位置

在汽车的复杂电路网络中&#xff0c;仪表网关扮演着信息枢纽的角色。对于驾校使用大众朗逸车主而言&#xff0c;了解仪表网关的位置不仅有助于日常维护&#xff0c;更是故障诊断和车辆升级的关键所在。 大众朗逸作为一款深受消费者喜爱的车型&#xff0c;凭借其稳定的性能和经…

基于SSM+Jsp的水果销售管理网站

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

BirdTalk IM集群中消息流转策略讨论

BirdTalk IM集群中消息流转策略讨论 目前群聊的存储策略是1写多读方案&#xff1b;每个群组一个队列&#xff0c;按时间顺序排列&#xff0c;不区分用户&#xff1b; 私聊的存储是写扩散的&#xff0c;每个人都有自己的消息队列&#xff0c;按时间顺序 保存所有的消息&#x…

详细分析Matplotlib 绘制三维曲线图的细节(附Demo)

目录 前言1. 基本知识2. Demo 前言 对于Matplotlib的基本知识推荐阅读&#xff1a;python之Matplotlib详细分析&#xff08;附代码&#xff09; 1. 基本知识 Matplotlib 是 Python 中常用的绘图库&#xff0c;可以用于生成各种类型的图表&#xff0c;包括三维曲线图 在三维…

Protobuf安装配置--附带每一步截图

Protobuf Protobuf&#xff08;Protocol Buffers&#xff09;协议是一种由 Google 开发的二进制序列化格式和相关的技术&#xff0c;它用于高效地序列化和反序列化结构化数据&#xff0c;通常用于网络通信、数据存储等场景。 为什么要使用Protobuf Protobuf 在许多领域都得到…

如何利用AI大模型设计电机本体?

一、背景 AI在电机本体设计中的应用正逐渐成为提升设计效率、优化性能和降低成本的重要手段。通过深度学习、机器学习、计算机辅助设计&#xff08;CAD&#xff09;和仿真技术的结合&#xff0c;AI能够帮助工程师更快速准确地完成电机的设计与优化工作。以下是AI在电机本体设计…

关于如何得到Mindspore lite所需要的.ms模型

关于如何得到Mindspore lite所需要的.ms模型 一、.ckpt模型文件转.mindir模型二、.mindir模型转.ms模型三、其它3.1 代码3.2 数据 四、参考文档 一、.ckpt模型文件转.mindir模型 由于要得到ms模型&#xff0c;mindspore的所有模型里面&#xff0c;是必须要用mindir模型才可以进…