Day11_Python_包和模块

一、OS模块

OS:operation system 用于获取系统的功能,主要用于操作文件或者文件夹
import os

print(os.name)    # posix ------> Linux,MacOS/ nt-----> Windows
print(os.environ)
print(os.environ.get('PATH'))

# curdir: current directory 当前目录
print(os.curdir)    # . --> 表示当前目录【..表示上级目录】

# 当前目录(路径)
# 绝对路径:从磁盘根目录开始的完整路径
# 相对路径:从当前目录(或项目目录)开始的路径
print(os.getcwd())    # /Users/hi-raphael/Desktop/Python2004/day11/code

# 后面的必须掌握
# listdir():获取指定路径下的所有文件或目录的名字,返回一个列表
print(os.listdir(r'/Users/hi-raphael/Desktop/Python2004/day11/code'))
# ['02_OS模块.py', '昨日作业', '01_复习.py']

# mkdir():新建目录
# os.mkdir('test')
# os.makedirs('a/b/c')   # 可以递归创建目录

# 删除目录
# os.rmdir('test')
# os.rmdir('a')  # 报错,只能删除空目录

# 删除文件
# os.remove('a.txt')

# 重命名
# os.rename('a', 'aaa')
# os.rename(r'aaa/a.txt', 'aaa/bbb.txt')

#  文件属性(了解)
# print(os.stat('aaa/bbb.txt'))

# os.path.join():将多个路径拼接
print(os.path.join(r'/Users/hi-raphael/Desktop/Python2004/day11/aaa','bbb.py'))  # aaa/bbb
    # /Users/hi-raphael/Desktop/Python2004/day11/aaa/bbb.py
# os.path.split(): 拆分
print(os.path.split(r'/Users/hi-raphael/Desktop/Python2004/day11/aaa/b/bbb.py'))
    # /Users/hi-raphael/Desktop/Python2004/day11/aaa/bbb.py

# os.path.splitext(): 将文件的名称和扩展名拆分
print(os.path.splitext('ccc.py'))
  #  ('ccc', '.py')

# os.path.getsize():获取文件大小
print(os.path.getsize(r'/Users/hi-raphael/Desktop/Python2004/day11/code/02_OS模块.py'))

# os.path.abspath(): 获取指定文件的绝对路径
print(os.path.abspath('bbb.py'))

# __file__:当前文件名
print(os.path.abspath(__file__))  # /Users/hi-raphael/Desktop/Python2004/day11/code/02_OS模块.py

# os.path.exist(): 获取文件或目录是否存在
dir_path_ = r'/Users/hi-raphael/Desktop/Python2004/day11/code'
file_path = r'/Users/hi-raphael/Desktop/Python2004/day11/code/02_OS模块.py'
print(os.path.exists(dir_path_))
print(os.path.exists(file_path))

# os.path.isfile(): 是否为文件
print(os.path.isfile(dir_path_))   # False
print(os.path.isfile(file_path))   # True

# os.path.isdir(): 是否为目录
print(os.path.isdir(dir_path_))   # True
print(os.path.isdir(file_path))    # False

# os.path.dirname(): 父目录
print(os.path.dirname(dir_path_))   # r/Users/hi-raphael/Desktop/Python2004/day11

# os.path.basename():文件名
print(os.path.basename(file_path))


# 练习:
# 查找指定目录下的所有py文件和txt文件
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)
            # print(file_type)
            if file_type == '.py' or file_type == '.txt':
                print(file_name)


get_file(r'/Users/hi-raphael/Desktop/Python2004/day11/code')

二、遍历目录

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'/Users/hi-raphael/Desktop/Python2004/day11/newdir')

三、包和模块

1、包概述:

 包:初期理解为文件夹
作用:一种管理Python模块命名空间的形式,采用"点语法"   os.path
包和文件夹之间的区别:Python的包中有一个特殊的文件__init__.py文件,前期里面不写任何内容,但是,就是为了告诉编译器,当前这个目录不是普通目录,是一个包。
1.在Python中,一个py文件其实就是一个模块
2.如果要跨模块调用函数,需要在运行的模块中导入需要使用的模块,调用函数的时候需要指明函数的路径。
创建方式:选中工程,创建Python package
意义:在开发过程中,为了解决文件命名冲突的问题,只要保证最上层的包命名不相同,就不会于别人的发生冲突

2、模块概述

为了解决维护问题,一般情况下,在一个完整的项目中,会将特定的功能分组,分别放到不同的文件中,在使用的过程中,可以单独维护,各个不同的文件之间互不影响,每个.py文件就被称为一个模块,通过结合包的使用来组织文件
封装思路:  函数 => 类 => 模块 => 包 => 项目
优点:
a.提高了代码的可维护性
b.提高了代码的复用性【当一个模块被完成之后,可以在多个文件中使用】
c.引用其他的模块【第三方模块】  
d.避免函数名和变量的命名冲突
# 包: 带有__init__.py文件的文件夹
# 模块:一个模块就是一个python文件
#    1. 内置模块:python提供的模块
#    2. 自定义模块:自己写的模块
#    3. 第三方模块:别人写的模块

# 倒入模块
# 1、使用import
# 2、使用from-import

# import
import math
import os, random

# 自定义模块
import module1

print(module1.name, module1.age)
module1.show('李四', 25)

# 2. from-import
# from module1 import name,age,show
from module1 import *    # # 模糊导入:导入所有
print(name, age)
# print(module1.name, age)   # 报错
show('王五', 30)

# 别名:小名
import random as rd
print(rd.random())   # 不可以使用原名

from random import randrange as rr
print(rr(1,3))


# 包
import package_01.m2   # 不推荐
print(package_01.m2.sex)

from package_01 import m2
print(m2.sex)

from package_01.m2 import sex
print(sex)

### 第三方模块
# 如何按照或下载第三方模块
# 1、使用pycharm安装
# 2、使用pip命令
#       pip -V 查看版本
#       pip install requests  安装
#       pip uninstall requests  卸载
#       pip list 现实所有包
#       pip freeze 现实自己安装的包(不包含pip和setuptools)
#       pip show requests 查看详情

import module1

if __name__ == '__main__':
    # 做一个测试调用
#    show('张三', '45')

    import math
    print(dir(math))  # 获取模块中的所有变量名,函数名等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值