Matlab 的.m 文件批量转成py文件

news2024/11/15 10:44:12

在工作中碰到了一个问题,需要将原来用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 subprocess

def 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 chardet

def 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:\"  # 指定需要转换的文件夹路径

 转换成功后再打开文件:

完成,撒花*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。希望能帮上和我一样需求的朋友吧,这一天天的各种代码来回转真麻烦,能省点事是一点。

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

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

相关文章

Redis安装 ▎Redis详细知识点

前言: Redis是一个开源的内存数据结构存储,支持丰富的数据类型,如字符串、哈希、列表、集合和有序集合,作为一个键值对数据库,Redis能提供毫秒级的响应时间,适合高并发应用场景。它还支持持久化,将内存数据定期保存到…

路由器接口配置DHCP实验简述

一、路由器配置 [Huawei]undo info-center enable Info: Information center is disabled. [DHCP-SERVER]sysname DHCP-Server [DHCP-Server]dis this sysname DHCP-Server undo info-center enable return [DHCP-Server]dhcp enable Info: The operation may take a few secon…

【pytorch学习笔记,利用Anaconda安装pytorch和paddle深度学习环境+pycharm安装---免额外安装CUDA和cudnn】

作者链接: link 一、安装pytorch环境 1.打开打开anaconda的终端后 conda env list然后创建一个名字叫pytorch,python是3.8版本的环境 conda create -n pytorch python3.8再次看环境 conda env list# conda environments: #显示如下环境 base …

Rust GUI框架Tauri V1 入门

文章目录 Tauri介绍Vite开始创建 Rust 项目 调用指令window.__TAURI_INVOKE__.invoke is undefined 问题 参考资料JavaScript 模块Vue 框架Vue RouteviteNuxt gitignore文件上传到csdn gitcode网站端本地端 gitcode发布 Tauri介绍 Tauri是一款用Rust构建的开源框架&#xff0c…

私有化通讯工具:安全、高效、个性化,重塑企业沟通生态

在当今数字化时代,即时通讯已成为企业日常运营中不可或缺的一部分。随着数据安全和隐私保护意识的日益增强,越来越多的企业开始寻求更加安全、可控的沟通方式。私有化聊天工具应运而生,以其独特的核心优势,为企业构建了一个安全、…

选购到不好的宠物空气净化器会有什么危害?有哪几款推荐

前三个月真的是被我男朋友气到了,明明说好的一起养猫,他又嫌这嫌那的,真的是无语住。 在养猫前的一个月就说好了,谁下班早谁就先回家收拾,包括进门开窗通风、给猫喂食、还有铲猫砂盆。但是他现在抱怨说太麻烦了&#…

【PSINS工具箱】仅速度为观测量的SINS/GNSS组合导航,MATLAB源代码,无需下载,可直接复制

工具箱 本程序需要在安装工具箱后使用,工具箱是开源的,链接:http://www.psins.org.cn/kydm 程序简述 原文的153组合导航是SINS/GPS下的位置观测或位置+速度观测,本文所述的代码是仅三轴位置观测的,使用UKF来滤波。 最后输出速度对比、速度误差、姿态对比、姿态误差、位…

基于SpringBoot+Vue的房屋租赁平台

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的…

HT3163 免电感滤波25W AB/D类音频功放

特征 输出功率 15W (VDD12V, RL4Ω,THDN1%, Class D) 20W(VDD14V,RL4Ω,THDN1%, Class D) 25W(VDD14V,RL4Ω,THDN10%, Class D) 7.5W(VDD7.4V,RL4Ω,THDN10%, Class AB) 17W(VDD12V,RL4Ω,THDN10%, Class AB) 单电源系统,3V-16V宽电压输入范围 低静态电流: 7mA (VD…

制造业应用人工智能!成本与效益的博弈

制造业应用人工智能!成本与效益的博弈 前言制造业应用人工智能 前言 制造业一直是国家经济的重要支柱,而现在,人工智能的出现正在给制造业带来一场前所未有的变革。就像是一场风暴,席卷了整个制造业的世界,让一切都变…

net await 、 Task、 Async 不用async异步方法

详细资料 lamda 变成异步方法 ,只要在前面 加 async 修饰 即可 》》await 修饰的 ,await 所在的方法,必须修饰 async ThreadPool.QueueUserWorkItem( async (obj)>{while(true){await File.WriteAllTextAsync("路径","…

AORO A30防爆手机震撼发布,红外热成像尽显巡检“科技范儿”

随着工业化的深入发展,各类“危、急、特”场景(如化工园区、矿山作业、消防救援等)的安全巡检任务日益繁重且复杂多变。面对极端环境下的安全隐患,传统巡检手段显得力不从心,行业痛点亟待解决。遨游通讯凭借其深厚的技…

二维结构迭代次数顺序的连续性

在行列可自由变换的条件下,平面上的3点结构只有6个 4点结构只有16个 3点结构按照训练集A-B矩阵的高有3s1和3s2两种顺序,同样4点结构也有4s1和4s2两种顺序。4s1可以用结构加法转化成3点结构顺序4s1-3. (A,B)---6*n*2---(0,1)(1,0) 分类A和B,…

若依的使用

目录 一、启动步骤 二、重要的功能点: 1、登录: 流程: 前端: 注册: 2、创建子项目 3、导出 1、后台: 2、前端 三、如何生成代码: 一、启动步骤 将sql导入数据库。。。启动redis&…

57页PPT | 智慧文旅整体建设解决方案

主要介绍了智慧文旅的建设背景、需求分析、解决方案、应用系统功能需求、客户价值、企业价值、建设理念、建设思路、总体架构、安全管理体系、融媒体综合服务平台、大数据分析平台、智慧文旅云平台、智慧管理、智慧营销、智慧服务等方面的内容。 背景及需求分析 方案架构及理念…

【Vue】- 路由及传参

文章目录 知识回顾前言源码分析1. 声明式导航2. 路由传参3. 可选符4. 重定向5. 4046. 跳转及传参7. 路由懒加载拓展知识总结router-link静态传参和动态路由的对比知识回顾 前言 什么是单页面应用程序? ● 所有功能在一个html页面上实现 单页面应用优缺点? ● 优点:按需更新…

Java 入门指南:JVM(Java虚拟机)垃圾回收机制 —— 新一代垃圾回收器 ZGC 收集器

文章目录 垃圾回收机制垃圾收集器垃圾收集器分类ZGC 收集器ZGC 的性能优势复制算法指针染色读屏障 ZGC 的工作过程Stop-The-World 暂停阶段并发阶段 垃圾回收机制 垃圾回收(Garbage Collection,GC),顾名思义就是释放垃圾占用的空…

第二期: 第11节, uboot 命令的使用

问题:如果你只想控制一个led 灯,并且不想去写驱动。 那么可以直接 使用uboot 的命令,去改写内存。 uboot 命令的解析: 读命令, md[.b, .w. .l] address 注意: 这里的 .w 指的是两个字节,…

1.Seata 1.5.2 seata-server搭建

一:Seata基本介绍 Seata是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。 详见官网链接:https://seata.apache.org/zh-cn/ 1.历史项目里的使用经验: 之前公司里的oem用户对应的App…

时钟频率、AI采样率与AO更新率的关系

在数据采集和信号生成设备(如NI板卡)中,时钟频率、AI(模拟输入)采样率、以及AO(模拟输出)更新率是三个至关重要的参数。它们共同决定了设备在信号采集与生成时的性能表现。本文将详细分析它们之…