python跨文件夹调用别的文件夹下py文件或参数方式详解

 更新时间:2023年08月16日 11:19:17   作者:AI创世纪  
这篇文章主要给大家介绍了关于python跨文件夹调用别的文件夹下py文件或参数方式的相关资料,在python中有时候我们需要调用另一.py文件中的方法或者类,需要的朋友可以参考下

摘要:

本文章主要介绍了python运行或调用另一个py文件或参数方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,请提出来。

第一章   运行另一个py文件

(1)在file_A.py中运行file_B.py文件,注意这里是运行,不是引用

import os
os.system("python file_B.py para_a1 para_a2")
#其他形式
os.system("python file_B.py %s" % para_A)
os.system("python file_B.py " + para_A)

需要注意文件路径的写法,在docker中运行文件,文件名前面需要加/,如os.system("python /file_B.py")

(2)file_B.py使用file_A.py传递的参数

import sys
print(sys.argv)
#由打印的结果可知,sys.argv[1:]是命令行传递的参数,sys.argv[0]是命令行运行的文件名
para_B = sys.argv[1]

(3) 引用另一个py文件中的变量或者方法

from file_A import df_A

第二章 python调用自己写的py文件

(1)同一个目录下的文件

同一个目录下直接写import xx就好了,xx为自己要调用的模块名字,虽然会有下划线报错,其实,没有错,仍然可以调用,这个下划线可以忽略。

(2)不同目录下的文件

不同路径下的文件先要调用添加路径sys.path.append(r"C:\xxx"),再做引用

import sys
#首先,添加路径,windows的路径和linux的路径符号不同\\,/,注意区别
#r是为了告诉python这是路径,别#把\n等特殊组合给转译)
sys.path.append(r"C:\xxx")
#下面import就可以了
import a
import b

(3)多个文件在多个目录的调用

首先我们也可以多次写sys.path.append(r"C:\xxx")来添加多个目录,但是这样有点麻烦,每次新建个工程可能就要加很多代码去调用公共单元。

解决方法是添加一个空的__init__.py文件(用于定义包的属性和方法,可以为空),表示这是一个包,比如这样,声明了aaa为一个包,a是内部的方法。

也可以这样,表示bbb是一个包,bb是bbb的子包,b是bb包的内部的方法

如果你需要调用a.py与b.py:

import aaa.a
import bbb.bb.b
import ccc.c

如果你在c.py文件,想要调用a.py,b.py只需要用到步骤2的知识即可,比如 

import sys
#添加上级目录
sys.path.append("..//")
import aaa.a
import bbb.bb.b

第三章 关于__init__.py的解释 

__init__.py作用是将文件夹变为一个Python模块,导入包时,事实上是导入了它的__init__.py文件

__init__.py 文件可以为空,但是也可以添加如下两个功能

(1)初始化包中各个模块,批量导入

pack包,配置__init__.py

1

2

import a

import b

导入pack包

访问__init__.py文件中的引用文件,需要加上包名

(2)__init__.py中的__all__,全部导入所声明的模块

此时导入pack包就相当于导入了a.py,b.py,c.py

pack包,配置__init__.py

1

__all__ = ['a', 'b', 'c']

调用

1

from pack import *

第四章 关于pyc与pyo文件

pyc就是py编译时生成的字节码文件,以后每次导入都会执行pyc,当py文件更新时pyc也会更新

如果解释器添加-o命令,py编译时会生成pyo文件,它相比pyc去掉了断言(assert)、断行号以及其他调试信息,运行速度更快

如果使用-OO选项,生成的pyo文件会忽略文档信息

第五章 模块导入时内部的原理

(1)import可导入的对象可以是以下类型:

  • 模块文件(.py文件)
  • C或C++扩展(已编译为共享库或DLL文件)
  • 包(包含多个模块)
  • 内建模块(使用C编写并已链接到Python解释器中)
  • 理解为后缀就是.py、.pyo、.pyc、.pyd、.so、.dll

(2)解释器工作:

1.根据导入的文件名创建命名空间(用来访问文件内部属性与方法)

2.在命名空间内执行源代码

3.创建一个源代码文件的对象,这个对象引用对应的命名空间,管理模块的内部函数与变量

4.一个模块可以多次导入,但是后面导入的模块只执行第三步

sys.modules可以打印出导入的模块名与模块对象的映射

(3)因此可以理解导入文件的三种方式:

  • import a.b:把a.b导入全局命名空间,想要调用c方法需要a.b.c
  • from a import b:把b导入全局命名空间,b.c
  • from a.b import c:把b的属性c直接导入命名空间

总结 

到此这篇关于python跨文件夹调用别的文件夹下py文件或参数方式的文章就介绍到这了,更多相关python跨文件夹调用py文件或参数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python中JSON数据格式的详细使用教程

    python中JSON数据格式的详细使用教程

    这篇文章主要给大家介绍了关于python中JSON数据格式的详细使用,JSON是一种用于存储和交换数据的语法,JSON是文本,使用JavaScript对象表示法编写,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-02-02
  • Python基于内置库pytesseract实现图片验证码识别功能

    Python基于内置库pytesseract实现图片验证码识别功能

    这篇文章主要介绍了Python基于内置库pytesseract实现图片验证码识别功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • 浅谈Python中的作用域规则和闭包

    浅谈Python中的作用域规则和闭包

    本文简单讲解了PYTHON的闭包,作用域的基本知识配合实例简单明了,适合初学者
    2018-03-03
  • 人工智能学习Pytorch教程Tensor基本操作示例详解

    人工智能学习Pytorch教程Tensor基本操作示例详解

    这篇文章主要为大家介绍了人工智能学习Pytorch教程Tensor的基本操作示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-11-11
  • python基于双向链表实现LFU算法

    python基于双向链表实现LFU算法

    这篇文章主要为大家详细介绍了python基于双向链表实现LFU算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • Python3连接MySQL(pymysql)模拟转账实现代码

    Python3连接MySQL(pymysql)模拟转账实现代码

    这篇文章主要介绍了Python3连接MySQL(pymysql)模拟转账实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • python基于tkinter制作图形界面的2048游戏

    python基于tkinter制作图形界面的2048游戏

    这篇文章主要介绍了python基于tkinter制作图形界面的2048游戏的方法,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-04-04
  • Python机器学习库scikit-learn入门开发示例

    Python机器学习库scikit-learn入门开发示例

    scikit-learn是一个开源Python语言机器学习工具包,它涵盖了几乎所有主流机器学习算法的实现,并且提供了一致的调用接口。它基于Numpy和scipy等Python数值计算库,提供了高效的算法实现
    2022-07-07
  • 如何使用 Python Pandas 更新行和列

    如何使用 Python Pandas 更新行和列

    这篇文章主要介绍了使用 Python Pandas 更新行和列的方法,在整篇文章中,我们将使用我们现在要创建的数据框,这将使大家了解更新数据操作,在此之后,大家可以将这些方法应用于自己的数据,需要的朋友可以参考下
    2023-03-03
  • python爬虫 基于requests模块的get请求实现详解

    python爬虫 基于requests模块的get请求实现详解

    这篇文章主要介绍了python爬虫 基于requests模块的get请求实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08

最新评论