Python 引入中文py文件

目录

背景

思路

importlib介绍

使用方法

1.导入内置库

importlib.util

2.创建模块规格对象 

spec = importlib.util.spec_from_file_location("example_module", "example.py")

3.创建模块对象 

module = importlib.util.module_from_spec(spec)

4.绑定规格与对象(执行对应的模块) 

spec.loader.exec_module(module)

用法讲解

创建模块规格对象:为py文件创建一个规格对象,包含文件的路径、名称、加载器等信息

创建模块对象:创建一个新的,空的模块对象

绑定规格与对象:将规格信息绑定到对象中,此时module就具备了该py文件里所定义的类、函数等数据

具体示例

文件结构如下

【打印你好世界.py】文件内容如下

【import_chinese_file.py】 内容如下

运行【 import_chinese_file.py】 结果如下


背景

        博主在设置Django绑定的定时任务,设计逻辑是一个py文件就是处理对应的定时任务,然后觉得用英文命名一个py文件可能没那么直观,所以想用中文来命名,就遇到了引入中文的py的问题,有了解决方法后就用文章记录下来


思路

        不使用import直接导入中文py文件的模块(因为import 不能导入中文或特殊的符号),使用importlib进行处理模块的加载

importlib介绍

        importlib 是 Python 提供的强大的动态导入模块库,主要用于动态导入模块和处理模块加载。

使用方法

1.导入内置库

        importlib.util

2.创建模块规格对象 

        spec = importlib.util.spec_from_file_location("example_module", "example.py")

3.创建模块对象 

        module = importlib.util.module_from_spec(spec)

4.绑定规格与对象(执行对应的模块) 

        spec.loader.exec_module(module)

用法讲解

创建模块规格对象:为py文件创建一个规格对象,包含文件的路径、名称、加载器等信息

        example_module:是自定义的模块名称,仅为标识,不会有具体影响

        example.py:实际需要引入的py文件路径

        spec = importlib.util.spec_from_file_location("example_module", "example.py")

创建模块对象:创建一个新的,空的模块对象

        spec:对应的规格对象,一般搭配 importlib.util.spec_from_file_location() 使用

        module = importlib.util.module_from_spec(spec)

绑定规格与对象:将规格信息绑定到对象中,此时module就具备了该py文件里所定义的类、函数等数据

        注意:此时相当于已经执行了该py文件,例如py文件里面有print(1),将直接打印1

        spec:规格对象

        module:模块对象

        spec.loader.exec_module(module)

具体示例

文件结构如下

        【aa】文件夹下有【打印你好世界.py】文件,是用户引入的模块

        【bb】文件夹的文件是进行引入的代码文件

【打印你好世界.py】文件内容如下

【import_chinese_file.py】 内容如下

# 1.导入内置库
import importlib.util
import os
from pathlib import Path# 具体需要引入的文件路径
file_path = os.path.join(Path(__file__).resolve().parent.parent, "aa", "打印你好世界.py")# 创建规格对象
spec = importlib.util.spec_from_file_location("测试的中文模块", file_path)# 创建模块对象
module = importlib.util.module_from_spec(spec)# 绑定规格对象至模块中(执行对应模块)
spec.loader.exec_module(module)  # 此时该模块已导入成功(相当于已运行该py文件)# 获取py文件的aa对象
print(module.__getattribute__("aa"))# 获取py文件的hello_world函数对象
print(module.__getattribute__("hello_world"))# 执行py文件的hello_world函数
print(module.__getattribute__("hello_world")())# 调用不存在的对象或函数
print(module.__getattribute__("name"))

运行【 import_chinese_file.py】 结果如下

        注意是先打印【我是bb对象】然后再打印【我是aa对象】,是因为执行 spec.loader.exec_module(module) 就已经运行了该py文件

如果调用py文件不存在的对象就会执行报下面的错误,这里就能看得到自定义的规格对象名称

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

远程工作岗位机会

电鸭:​​​​​​https://eleduck.com/?sortnew电鸭社区是具有8年历史的远程工作招聘社区,也是远程办公互联网工作者们的聚集地。在社区,我们进行有价值的话题讨论,也分享远程、外包、零活、兼职、驻场等非主流工作机会。「只工…

从客户端WebAPI视角下解读前端学习

API 应用程序接口(API,Application Programming Interface)是基于编程语言构建的结构,使开发人员更容易地创建复杂的功能。它们抽象了复杂的代码,并提供一些简单的接口规则直接使用。 JavaScript VS 客户端 API VS 客…

麒麟Kylin | 操作系统的安装与管理

以下所使用的环境为:VMware Workstation 17 Pro、Kylin-Server-10-SP2-x86-Release-Build09-20210524 一、创建虚拟机 在VMware主机单击【创建新的虚拟机】 **在新建虚拟机向导中选择【自定义】,然后点击【下一步】 ** 保持默认选项,然后…

elasticsearch hanlp插件远程词典配置

elasticsearch hanlp插件远程词典配置 背景远程词典配置新增远程词典文件修改hanlp-remote.xml自动加载词典 远程词典测试 背景 在使用elasticsearch的过程中,总会遇到与分词相关的需求,这里将针对常用的elasticsearch hanlp(后面统称为 es …

SpringBoot三层架构

目录 一、传统方式 二、三层架构 三、代码拆分 1、dao层 2、service层 3、control层 四、运行结果 一、传统方式 上述代码存在一定的弊端,在进行软件设计和软件开发中提倡单一责任原则,使代码的可读性更强,复杂性更低,可扩展性…

毕业答辩PPT:如何在短时间内高效准备?

提起PPT,大家的第一反应就是痛苦。经常接触PPT的学生党和打工人,光看到这3个字母,就已经开始头痛了: 1、PPT内容框架与文案挑战重重,任务艰巨,耗费大量精力。 2、PPT的排版技能要求高,并非易事…

R语言统计分析——数据集概念和数据结构

参考资料:R语言实战.第2版 1、数据集的概念 数据集通常是由数据构成的一个矩形数组,行表示观测,列表示变量。 不同行业对于数据集的行和列叫法不同。统计学称为观测(observation)和变量(variable&#xff…

mysql数据库中触发器的使用

一、修改分隔符号 delimiter $$或者是//或者~~都行 二、创建触发器函数名称 create trigger 函数名 三、什么样的操作出发,操作那个表 after:.....之后触发 befor:.....之前触发 insert: 插入触发 update:修改被触发 d…

什么是隐马尔可夫模型?

文章目录 一、说明二、玩具HMM:5′拼接位点识别三、那么,隐藏了什么?四、查找最佳状态路径五、超越最佳得分对齐六、制作更逼真的模型七、收获 关键词:hidden markov model 一、说明 被称为隐马尔可夫模型的统计模型是计算生物学…

gridview自带编辑功能如何判断用户修改的值的合法性

在使用GridView的编辑功能更新值时,确保输入的值合法性是十分重要的。为了实现这一点,你可以在GridView的RowUpdating事件中加入代码来检查用户输入的值。如果发现输入的值不合法,你可以取消更新操作并向用户显示错误消息。下面是如何实现的步…

05眼动识别软件详情2波形优化-滤波

对应视频链接点击直达 01项目点击下载,可直接运行(含数据库) 05眼动识别软件详情2 对应视频链接点击直达期望的数据展示数据波形对比如何实现几种常用滤波介绍维纳滤波巴特沃斯滤波器中值滤波排序滤波 推荐 结语其他以下是废话 原始数据的波…

CorelDRAW Graphics Suite下载2024最新版-CorelDRAW2024详细安装步骤

CorelDRAW​​ Graphics Suite官方版是款很多用户在工作中都会使用的矢量图形设计工具。CorelDRAW Graphics Suite正式版采用量身定制的界面和无与伦比的定制功能,畅享无缝设计经验。并且CorelDRAW Graphics Suite还可以广泛应用于商标设计、标志制作、模型绘制、插…

华为手环9省电设置

1、 手环开启熄屏显示续航约3天,原因为屏幕持续常亮显示;如不需要可通过手环“设置->表盘->熄屏显示”路径进行关闭; 2、 手环具备后台健康自动检测功能,您可根据需要选择是否使用或关闭: (1&#x…

AI发展面临的问题? —— AI对创造的重新定义

一、AI的问题描述 AI与数据安全问题:随着AI技术的发展和应用,数据安全问题日益突出。AI模型训练依赖于大量数据,而这些数据中可能包含个人隐私、商业秘密等敏感信息。如果数据在采集、存储、使用过程中处理不当,可能导致数据泄露或…

大数据的力量:推动战略决策和业务转型

在当前全球化的时代背景下,国际间的联系日益紧密,世界变得更加互联互通。面对各种危机,数据驱动决策和分析显得愈发重要。从医学研究到市场趋势分析,大数据技术在各个领域发挥着关键作用,推动着一场深刻的变革浪潮。 大…

Unity API学习之资源的动态加载

资源的动态加载 在实际游戏开发的更新换代中&#xff0c;随着开发的软件不断更新&#xff0c;我们在脚本中需要拖拽赋值的变量会变空&#xff0c;而要想重新拖拽又太花费时间&#xff0c;因此我们就需要用到Resources.Load<文件类型>("文件名")函数来在一开始…

产品应用 | 小盒子跑大模型!英码科技基于算能BM1684X平台实现大模型私有化部署

当前&#xff0c;在人工智能领域&#xff0c;大模型在丰富人工智能应用场景中扮演着重要的角色&#xff0c;经过不断的探索&#xff0c;大模型进入到落地的阶段。而大模型在落地过程中面临两大关键难题&#xff1a;对庞大计算资源的需求和对数据隐私与安全的考量。为应对这些挑…

齐普夫定律在循环神经网络中的语言模型的应用

目录 齐普夫定律解释公式解释图与公式的关系代码与图的分析结论 使用对数表达方式的原因1. 线性化非线性关系2. 方便数据可视化和分析3. 降低数值范围4. 方便参数估计公式详细解释结论 来自&#xff1a;https://zh-v2.d2l.ai/chapter_recurrent-neural-networks/language-model…

JMU 数科 数据库与数据仓库期末总结(4)实验设计题

E-R图 实体-关系图 E-R图的组成要素主要包括&#xff1a; 实体&#xff08;Entity&#xff09;&#xff1a;实体代表现实世界中可相互区别的对象或事物&#xff0c;如顾客、订单、产品等。在图中&#xff0c;实体通常用矩形表示&#xff0c;并在矩形内标注实体的名称。 属性…

优化:Day52 动态规划part10

LC300最长递增子序列 dp数组中dp[i]的含义是&#xff1a;以nums[i]结尾的子序列中最长递增子序列的长度为dp[i]最长连续递增子序列 非连续最长递增子序列 如果是连续的&#xff0c;只需要nums[i]>nums[i-1]就将dp值1&#xff0c;但是如果是非连续的&#xff0c;nums[i]之前…