Python:十一、OS模块,包和模块,目录遍历

一、OS模块

  • OS模块:operation system,操作系统。提供有关于操作系统的函数,处理文件或者文件夹。

    使用os模块前要先导入OS模块,import os!

1.1 OS模块相关命令
  • os.name:获取当前操作系统的名称。print(os.name)

    nt----->Windows
    posix------>Linux, Mac os

  • os.environ:获取当前系统的环境变量,以字典的形式返回。print(os.environ)

  • os.environ.get(“path”):获取当前系统的环境变量,通过key获取对应的value,获取路径。print(os.environ.get(‘path’))

  • os.listdir(r‘’):获取指定路径下的所有文件或目录的名字,返回一个列表。

    print(os.listdir(r'F:\Python2004\day11\code'))  ---> ['01_OS模块.py', '01_复习.py', '昨日作业']
    
  • os.mkdir():在指定的路径下创建文件夹,创建已存在的报错。

    os.mkdir(r"C:\Users\Administrator\Desktop\aaa")
    不加路径默认在当前目录创建:
    os.mkdir('didi')
    创建多层目录:
    os.makedirs('a/b/c')
    
  • os.rmdir():删除指定目录。当目录中有文件时不能删除,报错。删除不存在的也报错。

    os.rmdir(r"C:\Users\Administrator\Desktop\aaa")
    os.rmdir('didi')
    
  • os.remove(""):删除指定文件,文件名包含扩展名。

  • os.rename(old, new):重命名文件或目录(要在关闭状态下)。

    将目录a名称修改为aaa:
    os.rename('a','aaa')
    将目录aaa下的文件a修改为bbb:
    os.rename(r'aaa/a.txt','aaa/bbb.txt')
    
  • os.curdir:current directory当前目录

    print(os.curdir)  	---> .
    
  • os.getcwd():是一个方法,获取当前目录

    print(os.getcwd()) 	---> F:\Python2004\day11\code
    
1.2 os.path模块【重点】
  • os.path.join():将多个路径拼接。可以是路径与文件拼接。

    print(os.path.join(r'F:\Python2004\day11\code\aaa','bbb.py'))  ---> F:\Python2004\day11\code\aaa\bbb.py
    
  • os.path.split():拆分路径

    注意:返回的结果为元组,默认情况下只会拆分最后的文件或者文件夹!

    print(os.path.split(r'F:\Python2004\day11\code\aaa\bbb.py'))  ---> ('F:\\Python2004\\day11\\code\\aaa', 'bbb.py')
    
  • os.path.splitext():拆分路径,获取指定路径对应的文件的扩展名。

    print(os.path.splitext('bbb.py'))  ---> ('bbb', '.py')
    
  • os.path.getsize():获取文件大小(单位:字节)

    print(os.path.getsize(r'F:\Python2004\day11\code\01_OS模块.py'))  ---> 1530
    
  • os.path.abspath():获取指定文件的决定路径

    print(os.path.abspath('a.txt'))  ---> F:\Python2004\day11\code\a.txt
    
  • os.path.abspath(__ file__):获取当前文件的绝对路径。__ file__:当前文件

    print(os.path.abspath(__file__))  	---> F:\Python2004\day11\code\01_OS模块.py
    
  • os.path.exists():判断指定文件或目录是否存在,结果是bool值!

    print(os.path.exists(dir_path))     ---> True
    print(os.path.exists(file_path))    ---> True
    
  • os.path.isfile():判断是否为文件

    print(os.path.isfile(file_path))
    
  • os.path.isdir():判断是否为目录

    print(os.path.isdir(file_path))
    
  • os.path.dirname():父目录,获取指定文件夹的父路径

    print(os.path.dirname(dir_path))   ---> F:\Python2004\day11
    
  • os.path.basename():获取当前文件名或目录名

    print(os.path.basename(dir_path))  ---> 01_OS模块.py
    print(os.path.basename(dir_path))  ---> code
    
1.3 绝对路径和相对路径【掌握】
  • 绝对路径:带有盘符的完整路径,缺点:只能在指定的计算机上使用
  • 相对路径:不带盘符的路径,一般情况下是以当前的工程为参照物

二、包和模块

2.1 包
  • 作用:一种管理Python模块命名空间的形式,采用"点语法" os.path
  • 特点:带有__init__.py文件的文件夹,__ init__.py前期里面不写任何内容
  • 创建方式:选中工程,创建Python package
  • 包存在的意义:在团队开发的过程中,为了解决文件命名冲突的问题,只要保证最上层的包命名不相同,就不会与别人的发生冲突。
    from package1 import mo2
    print(mo2.sex)
    
    from package1.mo2 import sex
    print(sex)
    
2.2 模块
  • 模块:一个模块就是一个python文件

  • 模块分类:
    1、内置模块:python提供的模块
    2、自定义模块:自己写的模块
    3、第三方模块:不是官方提供也不是自己写的

  • 优点:
    a. 提高了代码的可维护性
    b. 提高了代码的复用性【当一个模块被完成之后,可以在多个文件中使用】
    c. 引用其他的模块【第三方模块】
    d. 避免函数名和变量的命名冲突

  • 封装思路: 函数 => 类 => 模块 => 包 => 项目

2.2.1 导入模块

当通过import将模块导入的时候,将模块对应的文件整个加载了一遍

  • 方法一:import 模块名

    import module1
    print(module1.name,module1.age)
    module1.show('hehe',25)
    
  • 方法二:from-import

    好处:进行局部的导入,避免内存空间的浪费

    from module1 import name,age,show
    print(name,age)
    show('zhangzhang',30)
    模糊导入,导入所有:
    from module1 import *  
    
  • 别名:小名

    1、将random 改为 rd:
    import random as rd
    print(rd.random())  # 不可以使用原名random了
    
    from random import randrange as rr
    print(rr(1,3))
    
2.2.2 总结
  1. 当模块有包的层级关系时,需要调用其中函数的时候,需要指明函数的路径。
  2. 采用了form。。。import的方式导入指定的函数之后,可以直接调用函数
  3. 当前文件中如果存在和模块中同名的函数的时候,当前文件中的函数仍然会将模块中的函数给覆盖掉
  4. 在python中,每个py文件其实都是一个模块,如果跨模块调用函数,则采用导入的方式。将不同的功能进行划分,调用函数的时候相对比较方便的

三、遍历目录

  • os 用于获取系统的功能,主要用于操作文件或者文件夹

    # 遍历目录:深度遍历
    import os
    
    def search_dir(path):
        # 1.获取目录下的所有文件名或目录名
        file_list = os.listdir(path)
        # 2.遍历每个子目录和子文件
        for file in file_list:
            # 3.获取子文件的绝对路径
            file_path = os.path.join(path,file)
            # 4.判断是文件还是目录
            if os.path.isfile(file_path):
                print('文件名:', file)
            else:
                print('目录名:',file)
    
                # 递归:继续找子目录下的所有文件和目录
                search_dir(file_path)
    search_dir(r'F:\Python2004\day11\code\newdir')
    
  • 练习:

    # 查找指定目录下的所有py文件和TXT文件名称
    import os
    def get_file(path):
        if not os.path.exists(path):
            return '文件不存在'
        file_list = os.listdir(path)
        # print(file_list)
        for file_name in file_list:
            # 获取绝对路径
            file_path = os.path.join(path,file_name)
            # 判断是否为文件
            if os.path.isfile(file_path):
                _,file_type = os.path.splitext(file_path) # _ :接收文件名,但是不用
                if file_type == '.py' or file_type == '.txt':
                    print(file_name)
    get_file(r'F:\Python2004\day11\code')
    

四、name属性和dir函数【了解】

4.1 name属性
  • __name__的作用:如果不想让模块中的某些代码执行,可以通过属性仅仅调用程序中的一部分功能。
  • 写在if判断中的代码只有当前模块被执行的时候才会被执行,检测到是其他的文件在使用当前的模块,则if语句中的代码不会被执行。
4.2 dir模块
  • dir():获取指定模块里面的所有的内容,返回的是一个列表。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值