python怎么导入os模块_python模块之os_sys_动态导入_包

os模块:

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

importosprint(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

importosimportos.path"""获取指定目录及其子目录下的 py 文件路径。说明:lis 用于存储找到的 py 文件路径。 get_py 函数,递归查找并存储 py 文件路径到 lis 中"""lis=[]defget_py(path,lis):

fileList= os.listdir(path) #获取path目录下文件

for filename infileList:

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 inlis:print(filepath+'\n')

os小例子:查找某些文件

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

importos## 查找某些文件

defsearch_file(start_dir, target):

os.chdir(start_dir)for each_file inos.listdir(os.curdir):

ext= os.path.splitext(each_file)[1]if ext intarget:

vedio_list.append(os.getcwd()+ os.sep + each_file +os.linesep)ifos.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

importsysprint(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

importtime#简单模拟进度条

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...')

defadd(x,y):return x+ydefsub(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 # 被上一级调用时,用此方式导入。

importsys,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 importcaldefrun():print(cal.add(7,5))

run()

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

from my_mod importma#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()

importimportlib

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 三个子目录,

importglance

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 安装

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值