python模块之os_sys_动态导入_包

#!/usr/bin/env python
# coding:utf-8

import os

print(os.getcwd())  #获取当前工作目录,即当前python脚本工作的目录路径
# os.chdir("dirname")  #改变当前脚本工作目录;相当于shell下cd
print(os.curdir)  # 返回当前目录: (‘.‘) 所以一个点也是代表当前目录的意思
print(os.pardir)  # 获取当前目录的父目录字符串名:(‘..‘)

# print(os.makedirs(‘dirname1/dirname2‘))  #  可生成多层递归目录
# print(os.removedirs(‘dirname1/dirname2‘))  #  若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推

# os.mkdir(‘dirname‘)    生成单级目录;相当于shell中mkdir dirname
# os.rmdir(‘dirname‘)    删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname

print(os.listdir(‘./web‘)) #   列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 不会递归
# os.remove()  删除一个文件
# os.rename("oldname","newname")  重命名文件/目录
# os.stat(‘path/filename‘)  获取文件/目录信息
# os.sep    输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
# os.linesep    输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
# os.pathsep    输出用于分割文件路径的字符串 win下为;,Linux下为:
# os.name    输出字符串指示当前使用平台。win->‘nt‘; Linux->‘posix‘
# os.system("bash command")  运行shell命令,直接显示
# os.environ  获取系统环境变量
# os.path.abspath(path)  返回path规范化的绝对路径
# os.path.split(path)  将path分割成目录和文件名二元组返回

a = os.path.dirname(r"D:\Python3\14 module\os_test.py")
b = os.path.basename("D:/Python3/14 module/os_test.py")
print(a) #  返回path的目录。其实就是os.path.split(path)的第一个元素
print(b)  #返回path最后的文件名。如果path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素

# os.path.exists(path)  如果path存在,返回True;如果path不存在,返回False
# os.path.isabs(path)  如果path是绝对路径,返回True
# os.path.isfile(path)  如果path是一个存在的文件,返回True。否则返回False
# os.path.isdir(path)  如果path是一个存在的目录,则返回True。否则返回False
# os.path.join(path1[, path2[, ...]])  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略

c = os.path.join(a,b) # 路径拼接会自动在里面加上反斜杠 print(‘----------->‘,c)
# os.path.getatime(path)  返回path所指向的文件或者目录的最后存取时间
# os.path.getmtime(path)  返回path所指向的文件或者目录的最后修改时间

if __name__ == "__main__":
    print(os.path.getmtime(__file__))
    print(__file__)

os小例子:

#!/usr/bin/env python
# coding:utf-8

import os
import os.path
"""获取指定目录及其子目录下的 py 文件路径。说明:lis 用于存储找到的 py 文件路径。 get_py 函数,递归查找并存储 py 文件路径到 lis 中 """
lis = []
def get_py(path,lis):
    fileList = os.listdir(path)   #获取path目录下文件
    for filename in fileList:
        pathTmp = os.path.join(path,filename)   #获取path与filename组合后的路径
        if os.path.isdir(pathTmp):   #如果是目录
            get_py(pathTmp,lis)        #则递归查找
        elif filename[-3:].upper()==‘.PY‘:   #不是目录,则比较后缀名
            lis.append(pathTmp)
path = input(‘请输入路径:‘).strip()
get_py(path,lis)
print(‘在%s目录及其子目录下找到%d个py文件\n分别为:\n‘%(path,len(lis)))
for filepath in lis:
    print(filepath+‘\n‘)

os小例子:查找某些文件

#!/usr/bin/env python
# coding:utf-8

import os

## 查找某些文件
def search_file(start_dir, target):
    os.chdir(start_dir)

    for each_file in os.listdir(os.curdir):
        ext = os.path.splitext(each_file)[1]
        if ext in target:
            vedio_list.append(os.getcwd() + os.sep + each_file + os.linesep)
        if os.path.isdir(each_file):
            search_file(each_file, target)  # 递归调用
            os.chdir(os.pardir)  # 递归调用后切记返回上一层目录

start_dir = input(‘请输入待查找的初始目录:‘)
program_dir = os.getcwd()

target = [‘.mp4‘, ‘.avi‘, ‘.rmvb‘] # 指定文件类型
vedio_list = []

search_file(start_dir, target)

f = open(program_dir + os.sep + ‘vedioList.txt‘, ‘w‘)
f.writelines(vedio_list)
f.close()

sys 模块

#!/usr/bin/env python
# coding:utf-8

import sys

print(sys.argv) # 使用命令行运行此脚本时可接受传入参数 例如: python3 sys_test.py abc ddd fff

# cmd = sys.argv[1]
# path = sys.argv[2]
#
# if cmd =="post":
#     pass
# elif cmd =="get":
#     pass

import  time
# 简单模拟进度条
for i in range(100):
    sys.stdout.write("#")
    time.sleep(0.1)
    sys.stdout.flush()

## 更多参考: http://www.cnblogs.com/cherishry/p/5725184.html

一个模块导入时路径的问题:

当前目录有bin.py文件和my_mod文件夹,my_mod文件夹下有ma.py和cal.py文件。

而os和sys正好用来解决my_mod/ma.py导入cal模块, 以及被bin.py导入的路径问题

#!/usr/bin/env python
# coding:utf-8
# cal.py

# print(‘before...‘)

def add(x,y):
    return x+y

def sub(x,y):
    return x-y

# print(‘end....‘)
if __name__ == "__main__": # 用于本文件的调试
    print(‘testing....‘)

print(__name__) # 被调用时将打印出文件名(模块名)

#!/usr/bin/env python
# coding:utf-8
# ma.py

# import cal # 直接执行本文件时,用此方式导入

# from my_mod import cal  # 被上一级调用时,用此方式导入。

import sys,os

BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

print(BASE_DIR)
print(os.path.abspath(__file__)) # 本文件的绝对路径

#  加入项目所在路径, 同时解决本身的运行和被调用时的路径问题。
sys.path.append(BASE_DIR)

from my_mod import cal

def run():
    print(cal.add(7,5))

run()

#!/usr/bin/env python
# coding:utf-8
# bin.py

from my_mod import ma

# ma.run()

## 模块的种类 :
# 1. 内置模块
# 2. 第三方模块
# 3. 自定义模块

### 包 和 文件夹 的区别: 是否有 __init__.py 文件

if __name__ =="__main__": # 假设将当前脚本作为主函数,仅可执行,不允许被调用。 可以避免反复调用带来的坑
    ma.run()

动态导入模块: 参考: https://www.cnblogs.com/zy6103/p/6943557.html

#!/usr/bin/env python
# coding:utf-8

# 动态导入的方法:

# mt = __import__(‘m1.t‘) # 只能导入最顶级模块 点后面的不会被导入
# print(mt)
# m1.t.test1()
#
# from m1.t import test1,_test2
#
# test1()
# _test2()

import importlib

m = importlib.import_module(‘m1.t‘) # 动态导入就是基于反射的

print(m)
m.test1()
m.test2()

‘‘‘
动态导入模块方法1: __import__ 

说明:

  1. 函数功能用于动态的导入模块,主要用于反射或者延迟加载模块。

  2. __import__(module)相当于import module

举例说明:

首先创建一个模块目录lib,然后在目录内创建一个模块为:aa.py

模块代码为:

class c(object):
    def __str__(self):
        return ‘C language‘
在lib目录平级新建一个测试的模块,使用 __import__ 动态以字符串形式导入lib下的aa模块。

lib = __import__(‘lib.aa‘) # 相当于import lib
c = lib.aa.c()
print(c)
动态导入模块方法2:import importlib

实例还是上面的lib.aa模块,这里使用importlib进行动态导入(这个方法好理解,也是官方建议使用的)

import importlib
aa = importlib.import_module(‘lib.aa‘)
c = aa.c()
print(c)
‘‘‘

如果自定义的模块中有写    __all__ = [‘read‘,‘read2‘]    # 此方法的列表中只和 import * 有关系 
被导入后则只能使用 列表中列出的内容。

包: 类似于文件夹,例如 当前项目day20 下有 glance目录,下面又有 api, cmd, db 三个子目录,

import glance
glance.db.models.register_models(‘mysql‘)
glance.api.policy.get()
glance.cmd.manage.ma()

想要使用glance 下面子目录中的模块,则需要每级目录下面的  __init__.py  有相应的导入动作. 这样,整个glance包内的模块都可以使用了。

第三方软件安装:

1. pip包管理器

2. 源码安装: 下载,解压, 执行python setup.py build 编译, 执行 python setup.py install 安装

原文地址:https://www.cnblogs.com/FHBIAO/p/10174484.html

时间: 2024-12-21 09:28:25

python模块之os_sys_动态导入_包的相关文章

python 模块导入详解

本文不讨论 Python 的导入机制(底层实现细节),仅讨论模块与包,以及导入语句相关的概念.通常,导入模块都是使用如下语句: import ... import ... as ... from ... import ... from ... import ... as ... 一般情况下,使用以上语句导入模块已经够用的.但是在一些特殊场景中,可能还需要其他的导入方式.例如 Python 还提供了 __import__ 内建函数和 importlib 模块来实现动态导入.动态导入的好处是可以延迟

七. 使用反射动态导入模块

一 .动态导入模块 # 利用反射动态导入模块 执行模块中的函数 imp = input("请输入你想导入的模块名:") CC = __import__(imp) # 這种方式就是通过输入字符串导入你所想导入的模块 CC.f1() # 执行模块中的f1方法 print("******************************************") imp = input("请输入模块:") dd = __import__(imp) #

关于Python模块,或许是这样的:

Python模块: 当代码越来越多的时候: 我们将所有代码放入一个py文件:无法维护,如果我们将代码分拆放入多个py文件,同一个名字的变量不受影响 ,另外模块名即文件名,那么如何应用其他模块 import math 引用math模块 print math.pow(2,10) 调用math模块的函数 但是模块多了后会重名,解决冲突方式:放入不同的包即可 1.导入模块 要使用一个模块,我们必须首先导入该模块.Python使用import语句导入一个模块.例如,导入系统自带的模块 math: impo

python模块与包的导入

1. 模块与包的区别 模块,即module,一个包含python语句的.py文件就是一个模块!每个源代码文件都会自动成为模块!没有额外的语法用来声明模块. 包,又称模块包,即module package,是一个目录,该目录中包含.py文件,其中必须有一个__init__.py文件,该文件用于声明和初始化模块包.第一次在进程中导入某个目录(包)时,python会自动运行__init__.py文件中的代码.该目录会在内存中创建一个模块对象,__init__.py中赋值的变量则会变成该模块对象的属性.

python中动态导入模块

如果导入的模块不存在,Python解释器会报 ImportError 错误: >>> import something Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named something 有的时候,两个不同的模块提供了相同的功能,比如 StringIO 和 cStringIO 都提供了Strin

Python动态导入模块

如果导入的模块不存在,Python解释器会报 ImportError 错误: >>> import something Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named something 有的时候,两个不同的模块提供了相同的功能,比如 StringIO 和 cStringIO 都提供了Strin

Python基础----import模块导入和包的调用

模块概念 在Python中,一个.py文件就称之为一个模块(Module).使用模块组织代码,最大的好处是大大提高了代码的可维护性 模块一共三种:python标准库.第三方模块.应用程序自定义模块. 相同名字的函数和变量完全可以分别存在不同的模块中,因此,我们自己在编写模块时,不必考虑名字会与其他模块冲突.但是也要注意,尽量不要与内置函数名字冲突. 模块导入 import语句 1 import module1[, module2[,... moduleN] 使用import语句时候,Python

Python 动态导入模块

动态导入模块 目录结构: zhangsandeMacBook-Air:1110 zhangsan$ tree . . ├── lib │   └── aa.py ├── test1.py lib目录下有一个aa.py文件,其中C类中有一个属性name: class C: def __init__(self): self.name = 'zhangsan' 在test1.py文件中需要动态导入aa这个模块有两种办法: 第一种: lib = __import__('lib.aa') obj = li

python 反射 动态导入模块 类attr属性

1.反射 hasattr getattr delattr setattr 优点:事先定义好接口,接口只有在被完成后才能真正执行,这实现了即插即用,这其实是一种“后期绑定”,即先定义好接口, 然后是再去实现具体的功能 print(hasattr(p, 'age')) # True 是否有属性 判断 print(getattr(p, 'name', '没有找到该参数')) # get属性值 print(getattr(p, 'name1', 'False')) # False setattr(p,