Python 引入中文py文件

devtools/2024/9/23 0:09:04/

目录

背景

思路

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】 内容如下

python"># 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.ppmy.cn/devtools/52360.html

相关文章

远程工作岗位机会

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

ModuleNotFoundError: No module named ‘MySQLdb‘

python项目运行遇到报错:ModuleNotFoundError: No module named ‘MySQLdb’ 解决办法 1、安装依赖 pip install pymysql2、新增配置 在项目的__init__.py文件中添加以下代码即可解决。 import pymysql pymysql.install_as_MySQLdb()

Node.js环境安装与管理指南

Node.js作为一个高效的JS运行环境,已经成为了现代Web开发的标配之一。但Node.js版本众多,不同项目可能需要不同版本的Node环境,如何管理这些版本成为了一个技术难题。本文将介绍如何使用NVM(Node Version Manager)来管…

嵌入式中间件_1.嵌入式中间件的定义及特点

1.嵌入式中间件的定义及特点 1.嵌入式中间件的定义 中间件(Middleware)属于可复用 软件的范畴。顾名思义,中间件处于操作系统软件与用户的应用软件的中间,在操作系统、网络和数据库之上,应用软件之下,其作…

第二篇: 掌握Docker的艺术:深入理解镜像、容器和仓库

掌握Docker的艺术:深入理解镜像、容器和仓库 1. 引言 1.1 简要介绍Docker的重要性 在当今快速发展的技术世界中,软件开发和部署的效率和可靠性是衡量成功的关键因素。Docker,作为一个开源的容器化平台,革新了软件的打包、分发和…

Excel 常用技巧(三)

Microsoft Excel 是微软为 Windows、macOS、Android 和 iOS 开发的电子表格软件,可以用来制作电子表格、完成许多复杂的数据运算,进行数据的分析和预测,并且具有强大的制作图表的功能。由于 Excel 具有十分友好的人机界面和强大的计算功能&am…

Fontconfig head is null, check your fonts or fonts configuration问题解决

报错信息: Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [R equest processing failed: com.alibaba.excel.exception.ExcelGenerateException: java.lang.InternalError: java.lang.reflect.InvocationTargetExcep…

RabbitMQ 见解一

1.初识MQ 1.1.同步和异步通讯 微服务间通讯有同步和异步两种方式: 同步通讯:就像打电话,需要实时响应。 异步通讯:就像发邮件,不需要马上回复。 两种方式各有优劣,打电话可以立即得到响应,…