Matlab 的.m 文件批量转成py文件
在工作中碰到了一个问题,需要将原来用matlab gui做出来的程序改为python程序,因为涉及到很多文件,所以在网上搜了搜有没有直接能转化的库。参考了【Matlab】一键Matlab代码转python代码详细教程_matlab2python-CSDN博客 这位博主提到的matlab2python工具,因为工具只能转换单个.m文件,对我这种需要批量转化一百多个文件的及其不友好,而且原来的注释里有中文,所以还需要把代码转为UTF-8格式。
1. matlab2python工具 下载
git clone https://github.com/ebranlard/matlab2python
cd matlab2python
pip install -r requirements.txt
如果实在翻不了墙的朋友,我看csdn下载资源里也能直接下载。下载了文件夹,按照上面的步骤把requirements.txt里的库装一下就好了。
2. 批量将.m转为.py
下面这个代码利用 subprocess 模块来执行
python matlab2python.py [m_file] -o [py_file]
完整代码:
import os
import subprocessdef convert_m_files_to_py(source_folder, destination_folder, converter_script):"""遍历 source_folder 中的所有 .m 文件,使用 matlab2python.py 转换为 .py 文件,输出到 destination_folder。参数:- source_folder: 包含 .m 文件的文件夹路径- destination_folder: 转换后 .py 文件的输出文件夹- converter_script: matlab2python.py 脚本的路径"""# 确保目标文件夹存在if not os.path.exists(destination_folder):os.makedirs(destination_folder)# 遍历源文件夹中的所有文件for filename in os.listdir(source_folder):# 检查文件是否为 .m 文件if filename.endswith('.m'):m_file_path = os.path.join(source_folder, filename)py_file_name = filename.replace('.m', '.py')py_file_path = os.path.join(destination_folder, py_file_name)# 调用 matlab2python.py 转换文件command = f'python {converter_script} "{m_file_path}" -o "{py_file_path}"'print(f'正在转换: {m_file_path} -> {py_file_path}')# 执行命令try:subprocess.run(command, shell=True, check=True)except subprocess.CalledProcessError as e:print(f"文件 {filename} 转换时出错: {e}")if __name__ == "__main__":source_folder = r"F:\" # 存放 .m 文件的文件夹路径destination_folder = r"F:\" # 输出 .py 文件的文件夹路径converter_script = r"F:\matlab2python.py" # matlab2python.py 文件的路径# 调用函数进行批量转换convert_m_files_to_py(source_folder, destination_folder, converter_script)
记得把这里文件夹路径改成自己的路径:
source_folder = r"F:\" # 存放 .m 文件的文件夹路径
destination_folder = r"F:\" # 输出 .py 文件的文件夹路径
converter_script = r"F:\matlab2python.py" # matlab2python.py 文件的路径
3.批量将.py文件格式改为UTF-8
上面的代码运行下来会出现一个问题:

原来.m文件里的中文会出现乱码,这时候需要把文件统一转为UTF-8格式,因为不确定原来的代码是什么格式,所以这里我用了chardet 库来检测文件的原始编码,然后进行UTF-8转换。
先下载chardet 库
pip install chardet
然后完整代码:
import os
import chardetdef detect_file_encoding(file_path):"""检测文件的编码:param file_path: 文件路径:return: 文件的编码格式"""with open(file_path, 'rb') as f:raw_data = f.read()result = chardet.detect(raw_data)return result['encoding']def convert_to_utf8(file_path):"""将文件转换为 UTF-8 编码:param file_path: 需要转换的文件路径"""try:# 检测文件的原始编码original_encoding = detect_file_encoding(file_path)if original_encoding is None:print(f"无法检测文件 {file_path} 的编码")return# 读取文件内容,使用检测到的编码with open(file_path, 'r', encoding=original_encoding, errors='ignore') as f:content = f.read()# 将内容重新保存为 UTF-8 编码with open(file_path, 'w', encoding='utf-8') as f:f.write(content)print(f"文件 {file_path} 已成功从 {original_encoding} 转换为 UTF-8 编码")except Exception as e:print(f"文件 {file_path} 转换失败: {e}")def convert_folder_to_utf8(folder_path):"""遍历文件夹并将所有 .py 文件转换为 UTF-8 编码:param folder_path: 需要转换的文件夹路径"""for root, _, files in os.walk(folder_path):for file in files:if file.endswith('.py'):file_path = os.path.join(root, file)convert_to_utf8(file_path)if __name__ == "__main__":folder_path = r"F:\" # 指定需要转换的文件夹路径convert_folder_to_utf8(folder_path)
记得把这里的路径改成你需要批量处理的文件夹路径
folder_path = r"F:\" # 指定需要转换的文件夹路径
转换成功后再打开文件:

完成,撒花*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。希望能帮上和我一样需求的朋友吧,这一天天的各种代码来回转真麻烦,能省点事是一点。
相关文章:
Matlab 的.m 文件批量转成py文件
在工作中碰到了一个问题,需要将原来用matlab gui做出来的程序改为python程序,因为涉及到很多文件,所以在网上搜了搜有没有直接能转化的库。参考了【Matlab】一键Matlab代码转python代码详细教程_matlab2python-CSDN博客 这位博主提到的matla…...
【软考】传输层协议TCP与UDP
目录 1. TCP1.1 说明1.2 三次握手 2. UDP3. 例题3.1 例题1 1. TCP 1.1 说明 1.TCP(Transmission Control Protocol,传输控制协议)是整个 TCP/IP 协议族中最重要的协议之一。2.它在IP提供的不可靠数据服务的基础上为应用程序提供了一个可靠的、面向连接的、全双工的…...
Arthas dashboard(当前系统的实时数据面板)
文章目录 二、命令列表2.1 jvm相关命令2.1.1 dashboard(当前系统的实时数据面板) 二、命令列表 2.1 jvm相关命令 2.1.1 dashboard(当前系统的实时数据面板) 使用场景: 在 Arthas 中,dashboard 命令用于提…...
微服务保护之熔断降级
在微服务架构中,服务之间的调用是通过网络进行的,网络的不确定性和依赖服务的不可控性,可能导致某个服务出现异常或性能问题,进而引发整个系统的故障,这被称为 微服务雪崩。为了防止这种情况发生,常用的一些…...
TomCat乱码问题
TomCat控制台乱码问题 乱码问题解决: 响应乱码问题 向客户端响应数据: package Servlet;import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servl…...
依赖库查看工具Dependencies
依赖库查看工具:Dependencies Dependencies 是一款 Windows 平台下的静态分析工具,用来分析可执行文件(EXE、DLL 等)所依赖的动态链接库(DLL)。它可以帮助开发者和系统管理员快速查找程序在运行时可能缺少的…...
Kafka 下载安装及使用总结
1. 下载安装 官网下载地址:Apache Kafka 下载对应的文件 上传到服务器上,解压 tar -xzf kafka_2.13-3.7.0.tgz目录结果如下 ├── bin │ └── windows ├── config │ └── kraft ├── libs ├── licenses └── site-docs官方文档…...
python实现多个pdf文件合并
打印发票时,需要将pdf合并成一个,单页两张打印。网上一些pdf合并逐渐收费,这玩意儿都能收费?自己写一个脚本使用。 实现代码: 输入pdf文件夹路径data_dir,统计目录下的“合并后的PDF”文件夹下,…...
2409js,学习js2
原文 全局对象 function sayHi() {alert("Hello"); }// 全局对象的函数. window.sayHi(); alert(window.innerHeight);更改背景 document.body.style.background "red";setTimeout(() > document.body.style.background "", 1000);当前地…...
SpellBERT: A Lightweight Pretrained Model for Chinese Spelling Check(EMNLP2021)
SpellBERT: A Lightweight Pretrained Model for Chinese Spelling Check(EMNLP2021) 一.概述 作者认为许多模型利用预定义的混淆集来学习正确字符与其视觉上相似或语音上相似的误用字符之间的映射,但映射可能是域外的。为此,我们提出了SpellBERT&…...
【机器学习】--- 决策树与随机森林
文章目录 决策树与随机森林的改进:全面解析与深度优化目录1. 决策树的基本原理2. 决策树的缺陷及改进方法2.1 剪枝技术2.2 树的深度控制2.3 特征选择的优化 3. 随机森林的基本原理4. 随机森林的缺陷及改进方法4.1 特征重要性改进4.2 树的集成方法优化4.3 随机森林的…...
[SAP ABAP] 创建域
我们可以使用事务码SE11创建域 输入要创建的域的名称,然后点击创建 输入简短描述,选择数据类型和输入字符数 激活并保存域,创建的域才能够生效 补充扩展练习 创建一个有关"性别"基本信息的域...
STM32 通过 SPI 驱动 W25Q128
目录 一、STM32 SPI 框图1、通讯引脚2、时钟控制3、数据控制逻辑4、整体控制逻辑5、主模式收发流程及事件说明如下: 二、程序编写1、SPI 初始化2、W25Q128 驱动代码2.1 读写厂商 ID 和设备 ID2.2 读数据2.3 写使能/写禁止2.4 读/写状态寄存器2.5 擦除扇区2.6 擦除整…...
C#进阶-基于雪花算法的订单号设计与实现
在现代电商系统和分布式系统中,高效地生成全局唯一的订单号是一个关键需求。订单号不仅需要唯一性,还需要具备一定的趋势递增性,以满足数据库索引和排序的需求。本文将介绍如何在C#中使用雪花算法(Snowflake)设计和实现…...
低版本SqlSugar的where条件中使用可空类型报语法错误
SQLServer数据表中有两列可空列,均为数值类型,同时在数据库中录入测试数据,Age和Height列均部分有值。 使用SqlSugar的DbFirst功能生成数据库表类,其中Age、Height属性均为可空类型。 开始使用的SqlSugar版本较低&…...
跨游戏引擎的H5渲染解决方案(腾讯)
本文是腾讯的一篇H5 跨引擎解决方案的精炼。 介绍 本文通过实现基于精简版的HTML5(HyperText Mark Language 5)来屏蔽不同引擎,平台底层的差异。 好处: 采用H5的开发方式,可以将开发和运营分离,运营部门自…...
docker构建java镜像,运行镜像出现日志 no main manifest attribute, in /xxx.jar
背景 本文主要是一个随笔,记录一下出现"no main manifest attribute"的解决办法 问题原因 主要是近期在构建一个镜像,在镜像构建成功后,运行一直提示"no main manifest attribute",当时还在想,是不是Dockerfile写错了,后来仔细检查了一下,发现是…...
react + antDesignPro 企业微信扫码登录
效果 实现步骤 1、项目中document.ejs文件引入企微js链接 注意:技术栈是使用的react antDesignPro,不同的技术栈有不同的入口文件(如vue在html文件引入) <script src"https://wwcdn.weixin.qq.com/node/wework/wwopen/j…...
Go-知识-定时器
Go-知识-定时器 1. 介绍2. Timer使用场景2.1 设定超时时间2.2 延迟执行某个方法 3. Timer 对外接口3.1 创建定时器3.2 停止定时器3.3 重置定时器3.4 After3.5 AfterFunc 4. Timer 的实现原理4.1 Timer数据结构4.1.1 Timer4.1.2 runtimeTimer 4.2 Timer 实现原理4.2.1 创建Timer…...
【alluxio编译报错】Some files do not have the expected license header
Some files do not have the expected license header 快捷导航 在开始解决问题之前,大家可以通过下面的导航快速找到相关资源啦!💡👇 快捷导航链接地址备注相关文档-ambaribigtop自定义组件集成https://blog.csdn.net/TTBIGDA…...
Windows屏保设置失效?解锁注册表权限的终极指南
1. 为什么你的Windows屏保设置突然失效了? 最近有没有遇到过这种情况:明明想设置个屏保保护隐私,却发现所有选项都变成灰色不可点击?这个问题我帮不少朋友解决过,其实90%的情况都是注册表权限在作怪。Windows系统有个特…...
数据治理进阶——解读埃森哲大型央企数字化转型数据治理企业架构建设案例【附全文阅读】
该方案聚焦大型央国企数字化转型,适用于企业高层决策者、IT 部门负责人、业务部门管理者以及对数字化转型感兴趣的专业人士。方案主要内容围绕数字化转型展开,涵盖数据治理、企业架构建设等关键领域。在数字化转型部分,明确其目的是释放禁锢价…...
企业如何防御LockBit 3.0?从IOC到实战检测规则编写指南
企业级防御实战:LockBit 3.0勒索病毒全维度对抗指南 1. 勒索病毒威胁态势与企业防御挑战 2023年全球网络安全报告显示,勒索软件攻击同比增长47%,其中LockBit系列占比高达28%。不同于传统恶意软件,LockBit 3.0采用模块化设计&#…...
嵌入式开发硬件知识体系与核心技能解析
嵌入式开发中的硬件知识体系构建1. 嵌入式开发的技术架构1.1 嵌入式系统技术分类现代嵌入式系统开发主要分为两大技术方向:嵌入式硬件开发:聚焦电路原理设计、PCB布局及硬件系统集成嵌入式软件开发:包含驱动层开发和应用程序开发两个层级1.2 …...
保姆级教程:用Project AirSim的Python脚本,5分钟复现无人机深度图避障Demo
5分钟实战:用Project AirSim实现无人机深度图避障全流程指南 刚接触无人机仿真的开发者常会遇到一个困境:想快速验证某个算法效果,却被复杂的配置和代码绊住脚步。本文将带你用Project AirSim提供的Python脚本,在5分钟内跑通完整的…...
LyricsX深度解析:macOS平台终极歌词解决方案的技术实现与高级应用
LyricsX深度解析:macOS平台终极歌词解决方案的技术实现与高级应用 【免费下载链接】LyricsX 🎶 Ultimate lyrics app for macOS. 项目地址: https://gitcode.com/gh_mirrors/ly/LyricsX LyricsX是一款专为macOS设计的终极歌词应用,通过…...
Web3j区块链开发实战:Java开发者的以太坊交互指南
Web3j区块链开发实战:Java开发者的以太坊交互指南 【免费下载链接】web3j Lightweight Java and Android library for integration with Ethereum clients 项目地址: https://gitcode.com/gh_mirrors/we/web3j 1. 核心价值解析:Web3j为何成为Java…...
WebRtcStreamer避坑指南:解决RTSP视频流延迟高、卡顿的7个优化方案
WebRTCStreamer实战优化:7种方案彻底解决RTSP流媒体高延迟与卡顿问题 当我们在监控系统或视频会议中遇到画面卡成PPT、声音延迟到像看译制片时,那种抓狂感技术人员都懂。最近在部署某智慧园区项目时,我们通过WebRTCStreamer将200路RTSP监控流…...
从零解析:富斯i6遥控器与STM32的IBUS协议通信实战
1. 为什么选择富斯i6遥控器与STM32通信 对于很多刚接触机器人或者智能小车开发的爱好者来说,无线控制模块的选择往往是个头疼的问题。市面上常见的方案要么价格昂贵,要么配置复杂,而富斯i6遥控器配合iA6B接收机恰好提供了一个低成本、高可靠性…...
JY61P陀螺仪串口数据解析实战:从协议到STM32代码实现
1. JY61P陀螺仪模块初探 第一次拿到JY61P这个六轴姿态传感器时,我下意识以为它和常见的MPU6050差不多。但实际用下来发现,这个国产模块在精度和易用性上都有明显优势。最让我惊喜的是它支持串口通信,完美避开了I2C协议那些令人头疼的时序问题…...
