zoukankan      html  css  js  c++  java
  • Python3 从零单排7_模块&os&sys

      模块在函数的基础上更进一层,

      作用:  1.提高代码的可维护性和扩展性     2.使用模块可以避免函数和变量名的冲突问题

      定义:只要所在目录有 __init__.py,就会被当做一个模块

      调用方法:

    import module
    
    from module import xx
    
    from module.xx.xx import xx as rename  
    
    from module.xx.xx import *

      调用优先级:先从当前目录里面找你需要调用的模块,当前目录找不到的话就python自己的环境变量里找。(sys.path可以查看python的环境变量目录)

      调用实质:运行调用的模块里的python代码(可以自行操作验证下)

      模块安装:

      1.pip install module_name  pip install -i 模块源的url(一般用国内的会比较快,如http://pypi.douban.com/simple/) install

      2.下载安装包,进入到下载的模块文件目录 先执行  python setup.py build 然后执行 python setup.py install

      跨模块导入:只需要把待导入模块所在目录加入到sys.path的环境变量即可跨模块导入,下面的os模块会讲到。

      模块相对导入:

      from .module_name import fun_name  #从当前目录下的module_name 里导入fun_name  

      from ..module_name import fun_name  #从上层目录下的module_name 里导入fun_name  

      注意:不能作为顶层模块来执行该文件夹中的py文件(即不能作为主函数的入口)

    ├── __init__.py
    ├── crm
    │   ├── __init__.py
    │   ├── admin.py
    │   ├── apps.py
    │   ├── models.py
    │   ├── tests.py
    │   ├── views.py  #from ..proj import settings
    └── proj
    │   ├── __init__.py
    │   ├── settings.py #from .import urls
    │   ├── urls.py
    │   └── wsgi.py
    ├── manage.py  #from crm import views
    
    # 运行manage.py报错,因为manage.py已经是顶层目录,现在views.py需要在这个目录下的proj导入settings,也就导致了manage.py这个主函数入口当做了顶层目录,调的时候自然就报错了。
    # 解决方法,将manage.py往外移一层,或者proj再往里面一层

      OS模块:

    import os,sys
    
    
    print(sys.path)#获取python的环境变量,以list形式返回
    print(sys.argv)#获取执行python文件时后面跟的参数,第一个参数是文件所在目录
    #输出:['E:\study\Automantic\jxz-code\Course4']
    print(os.listdir('./'))#获取指定目录下的文件及文件夹名称,以list形式返回
    #输出:['access.log', 'b.txt', 'c.txt', 'course4作业.py', 'goods.txt', 'user_info.txt', '、', '函数.py']
    print(os.getcwd())#获取当前目录
    #输出:E:studyAutomanticjxz-codeCourse4
    # print(os.chdir('E:studyAutomanticjxz-code'))#更换当前目录
    print(os.rename('c.txt','a.txt'))#修改文件名称
    print(os.mkdir('新目录'))#创建文件夹
    print(os.rmdir('新目录'))#删除文件夹(只能删除空文件夹)
    print(os.makedirs('E:\xixi\haha'))#依次创建目录
    print(os.removedirs('E:\xixi\haha'))#依次删除非空目录
    print(os.sep)#获取当前操作系统的路径分隔符
    #输出:
    print(os.environ)#获取当前操作系统的环境变量
    #输出:environ({'ALLUSERSPROFILE': 'C:\ProgramData'})
    print(os.pathsep)#获取当前系统的环境变量中每个路径的分隔符,linux是:,windows是;
    #输出:;
    print(os.path.abspath(__file__))#获取当前文件的绝对路径
    #输出:E:studyAutomanticjxz-codeCourse4函数.py
    print(os.path.dirname(os.path.abspath(__file__)))#获取指定路径的父目录
    #输出:E:studyAutomanticjxz-codeCourse4
    print(os.path.isdir(os.path.abspath(__file__)))#判断指定路径是不是一个文件夹
    #输出:False
    print(os.path.isfile(os.path.abspath(__file__)))#判断指定路径是不是一个文件
    #输出:True
    print(os.path.join('一级','二级','三级','haha.txt'))#将内容以当前操作系统的路径分隔符拼接成一个路径
    #输出:一级二级三级haha.txt
    print(os.path.split('E:studyAutomanticjxz-codeCourse4函数.py'))#分割路径和文件名
    #输出:('E:\study\Automantic\jxz-code\Course4', '函数.py')
    print(os.path.splitext('E:studyAutomanticjxz-codeCourse4函数.py'))#分离扩展名
    #输出:('E:\study\Automantic\jxz-code\Course4\函数', '.py')
    print(os.path.exists('E:studyAutomanticjxz-codeCourse4函数.py'))#判断目录或文件是否存在
    #输出:True
    print(os.path.basename('E:studyAutomanticjxz-codeCourse4函数.py'))#判断目录或文件是否存在
    #输出:函数.py

      os和sys的应用:

      问题:A君写了一个小系统,模块之间彼此可以正常调用,但是B君拷走了A君的代码,运行各种报错,大多为引用模块不存在,函数、方法未定义等,这是因为A君运行的时候都已经把他的绝对路径加进了python的环境变量,而B君在运行的时候并没有加环境变量,运行程序,在调用模块时,找不到模块自然报错了。

      解决:上面的模块介绍里可以看出,sys.path可以获取到一个python环境变量的列表,那么我们只需要把代码的工作目录加到列表里就可以了,具体代码如下:

    import sys,os
    cwd=os.path.abspath(__file__) #当前文件的绝对路径
    pwd=os.path.dirname(cwd)#获取当前文件的父级目录
    ppwd=os.path.dirname(pwd)#获取当前文件的父级目录的父级目录
    sys.path.insert(0,ppwd)#将当前文件的父级目录的父级目录加入python环境变量,那么这个文件夹下的所有.py文件都可以当做模块引入了
    from conf.setting import LOGS_PATH,FILE_PATH
    from lib.wrong import write
    write(LOGS_PATH,FILE_PATH)

      获取执行python文件时后面跟的参数

    import os,sys
    res1=os.system('ipconfig')#os.system(commad)执行操作系统命令,不返回执行结果
    res2=os.popen('ipconfig').read()#os.popen(commad)执行操作系统命令,返回执行结果,通过read方法可以读取内容
    inpu=sys.argv#argv获取执行该python文件时的参数为list,如 ls -a 这里的a就是参数
    if len(inpu)>1:
        if inpu[1]=='-install':
            print('安装成功')
        elif inpu[1]=='-help':
            print('靠人不如靠己,别老help')
    else:
        print('错了')
  • 相关阅读:
    eclipse 远程debug tomcat web项目
    阿里巴巴fastjson的使用
    STS 3.6.4 SpringMVC 4.1.6 Hibernate 4.3.8 MySQL
    Ubuntu su 认证失败
    mysql mha高可用架构的安装
    Swift开发教程--关于Existing instance variable '_delegate'...的解决的方法
    设计模式-适配器模式(Go语言描写叙述)
    Xcode6.3 怎样使用Leaks查看内存泄露
    java中的subString具体解释及应用
    出走三上海篇
  • 原文地址:https://www.cnblogs.com/znyyy/p/10072217.html
Copyright © 2011-2022 走看看