目录
学习Python(10)os模块&遍历目录&包和模块&第三方模块&name属性和dir函数
os模块
os模块
os : operation system (操作系统),用于获取系统的功能,主要用于操作文件或者文件夹
判断操作系统
import os
print(os.name)
# nt----->Windows
# posix------>Linux, MacOS
查看环境变量
print(os.environ)
print(os.environ.get('PATH'))
curdir: current directory 当前目录
# . 表示当前目录
# .. 表示上级目录
print(os.curdir) # .
当前目录(路径)
绝对路径: 从磁盘根目录开始的完整路径
相对路径: 从当前目录(或项目目录)开始的路径
print(os.getcwd())
# C:\Users\ijeff\Desktop\Python2004\day11\code
listdir()
获取指定路径下的所有文件或目录的名字, 返回一个列表
print(os.listdir(r'C:\Users\ijeff\Desktop\Python2004\day11\code'))
# ['01_复习.py', '02_os模块.py', '昨日作业']
新建目录
os.mkdir('giao哥')
os.makedirs('a/b/c') # 可以递归创建目录
删除目录
os.rmdir("giao哥")
os.rmdir('a') # 报错,只能删除空目录
删除文件
os.remove('a.txt')
重命名
os.rename('a', 'aaa')
os.rename(r'aaa/bbb.txt', 'aaa/bbb.py')
文件属性
print(os.stat('aaa/bbb.py'))
os.path
将多个路径拼接
os.path.join()
print(os.path.join(r'C:\Users\ijeff\Desktop\Python2004\day11\code\aaa', 'bbb.py'))
# => C:\Users\ijeff\Desktop\Python2004\day11\code\aaa\bbb.py
拆分
os.path.split()
print(os.path.split(r'C:\Users\ijeff\Desktop\Python2004\day11\code\aaa'))
# => ('C:\\Users\\ijeff\\Desktop\\Python2004\\day11\\code', 'aaa')
将文件名和扩展名拆分
os.path.splitext()
print(os.path.splitext('ccc.py'))
# => ('ccc', '.py')
获取文件大小
os.path.getsize()
print(os.path.getsize(r'C:\Users\ijeff\Desktop\Python2004\day11\code\02_os模块.py'))
获取指定文件的绝对路径
os.path.abspath()
print(os.path.abspath('a.txt'))
获取文件名
--file__
print(os.path.abspath(__file__))
文件或目录是否存在
os.path.exists()
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))
文件名
os.path.basename()
print(os.path.basename(file_path))
遍历目录
案例一:
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'C:\Users\ijeff\Desktop\Python2004\day11\code\newdir')
案例二:
import os
# 查找指定目录下的所有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)
# print(file_path)
# 判断是否为文件
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'C:\Users\ijeff\Desktop\Python2004\day10\code')
包和模块
包:初期理解为文件夹
作用:
一种管理Python模块命名空间的形式,采用"点语法" os.path
包和文件夹之间的区别:Python的包中有一个特殊的文件__init__.py文件,前期里面不写任何内容,但是,就是为了告诉编译器,当前这个目录不是普通目录,是一个包
创建方式:选中工程,创建Python package
# 包
# import package1.m2 # 不推荐
# print(package1.m2.sex)
# from package1 import m2
# print(m2.sex)
from package1.m2 import sex
print(sex)
包存在的意义
在团队开发的过程中,为了解决文件命名冲突的问题,只要保证最上层的包命名不相同,就不会与别人的发生冲突
模块:
为了解决维护问题,一般情况下,在一个完整的项目中,会将特定的功能分组,分别放到不同的文件中,在使用的过程中,可以单独维护,各个不同的文件之间互不影响,每个.py文件就被称为一个模块,通过结合包的使用来组织文件
封装思路: 函数 => 类 => 模块 => 包 => 项目
优点:
a.提高了代码的可维护性
b.提高了代码的复用性【当一个模块被完成之后,可以在多个文件中使用】
c.引用其他的模块【第三方模块】
d.避免函数名和变量的命名冲突
使用import导入模块
import math
# import os, random
# 自定义模块
# import module1
# import module1
#
# print(module1.name, module1.age)
# module1.show('蔡徐坤', 25)
使用from-import导入模块
from module1 import name, age, show
# 模糊导入: 导入所有
# from module1 import *
print(name, age)
show('张艺兴', 30)
别名: 小名
import random as rd
print(rd.random()) # 不可以使用原名
from random import randrange as rr
print(rr(1,3))
总结:
在python中,每个py文件其实都是一个模块,如果跨模块调用函数,则采用导入的方式
将不同的功能进行划分,调用函数的时候相对比较方便的
第三方模块
如何安装或下载第三方模块
1. 使用pycharm安装
2. 使用pip命令
# pip -V 查看版本
# pip install requests 安装
# pip uninstall requests 卸载
# pip list 显示所有包
# pip freeze 显示自己安装的包(不包含pip和setuptools)
# pip show requests 查看详情
name属性和dir函数
name属性
__name__的作用
如果不想让模块中的某些代码执行,可以通过属性仅仅调用程序中的一部分功能
【写在if判断中的代码只有当前模块被执行的时候才会被执行,检测到是其他的文件在使用当前的模块,则if语句中的代码不会被执行】
def fun1():
print("aaa")
def fun2():
print("bbb")
def fun3():
print("ccc")
#作用:写在下面判断中的代码,只有当前模块运行的时候才会被执行【起到屏蔽的作用】
if __name__ == "__main__":
fun1()
fun2()
fun3()
dir函数
newdir
import math,moduleTextDemo01
#获取指定模块里面的所有的内容
newdir
print(dir(math))
print(dir(moduleTextDemo01))