一、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 总结
- 当模块有包的层级关系时,需要调用其中函数的时候,需要指明函数的路径。
- 采用了form。。。import的方式导入指定的函数之后,可以直接调用函数
- 当前文件中如果存在和模块中同名的函数的时候,当前文件中的函数仍然会将模块中的函数给覆盖掉
- 在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():获取指定模块里面的所有的内容,返回的是一个列表。