python之os模块详解:常用的标准库及第三方库1-os模块
一、Python模块、包、标准库1.模块和包的概念
模块:在Python中,一个.py文件就是一个模块,模块让你能够有逻辑地组织你的 Python 代码段。模块能定义函数,类和变量等。
包:包是一个分层次的文件目录结构,它定义了一个由模块及子包组成的 python 的应用环境。简单来说,包就是文件夹,但该文件夹下必须存在 __init__.py 文件, 该文件的内容可以为空。__init__.py 用于标识当前文件夹是一个包。
Python模块或包引入常用的三种形式:
◆ import module1[, module2[,... moduleN]] 直接导入整个模块或包;
◆ from modname import name1[, name2[, ... nameN]] 从包或模块导入某个模块、类、函数等;
◆ from modname import * 从某个模块导入该模块的所有内容;
2.Python Package Index (PyPI)Python语言提供超过15万个第三方库,使用pip安装
Python包官网地址:https://pypi.org/
国内常见的镜像源站点:
➢ 阿里云:http://mirrors.aliyun.com/pypi/simple/
➢ 中国科技大学:https://pypi.mirrors.ustc.edu.cn/simple/
➢ 豆瓣(douban):http://pypi.douban.com/simple/
➢ 清华大学:https://pypi.tuna.tsinghua.edu.cn/simple/
➢ 中国科学技术大学:http://pypi.mirrors.ustc.edu.cn/simple/
3.Python 常用的标准库及第三方库利用Python标准许库或三方库,覆盖的功能场景包括:Web框架、网络编程、网络爬虫、网络内容提取、模板引擎、数据库、数据可视化、图片处理、文本处理、自然语言处理、机器学习、日志、代码分析等。
Python标准库:https://docs.python.org/zh-cn/3.7/library/index.html
Python资源集合:https://github.com/zhoujinjian/awesome-python-cn
二、os模块1.处理目录、文件os模块是Python标准库中的一个用于访问操作系统相关功能的模块,使用os模块中提供的接口,可以实现跨平台访问。
os模块的主要功能:系统相关、目录及文件操作、执行命令和管理进程
模块导入方式: import os
官方文档:https://docs.python.org/zh-cn/3.7/library/os.html
os模块中包含了一系列文件操作相关的函数,其中有一部分是Linux平台专用方法:
方法 | 说明 |
os.getcwd() | 获取当前工作目录,即当前python脚本工作的目录路径 |
os.chdir("..") | 改变当前脚本工作目录;相当于shell下cd |
os.listdir('.') | 列出指定目录下的所有文件和子目录,包括隐藏文件 |
os.makedirs('dir1/dir2') | 可生成多层递归目录 |
os.removedirs('dirname') | 递归删除空目录(要小心) |
os.mkdir('dirname') | 生成单级目录 |
os.rmdir('dirname') | 删除单级空目录,若目录不为空则无法删除并报错 |
os.remove('Filename') | 删除一个文件 |
os.rename("oldname","newname") | 重命名文件/目录 |
代码示例:
import os# 获取当前工作目录print(os.getcwd()) # C:\auto_test\auto_test_project\api_test\demo# 切换共工作目录,相当于cdos.chdir('c:')# 列出指定目录下的所有文件和子目录,包括隐藏文件print(os.listdir('.'))# 递归创建目录os.makedirs(name='test_parent/test_child') # 如果目录已存在,会提示无法创建# 递归删除空目录os.removedirs(name='test_parent/test_child')# 创建单级空目录os.mkdir(path='test') # 如果目录已存在,会提示无法创建# 删除单级空目录os.rmdir(path='test') # 注意:非空目录无法删除# 创建新文件with open(file='aaa.txt', mode='w', encoding='utf-8') as f: f.write('') f.close()path = 'aaa.txt'# 判断文件是否存在if os.path.exists(path): # 移除单个文件 os.remove(path)else: raise FileNotFoundError("文件不存在")
2.os.path文件路径处理
os.path 模块不仅提供了一些操作路径字符串的方法,还包含一些或者指定文件属性的一些方法:
方法 | 说明 |
os.path.abspath(path) | 返回path的绝对路径 |
os.path.basename(path) | 获取path路径的基本名称,即path末尾到最后一个斜杠的位置之间的字符串 |
os.path.dirname(path) | 返回path路径中的目录部分 |
os.path.exists(path) | 判断path对应的文件是否存在,返回值为布尔值:True/False |
os.path.getatime(path) | 返回path所指文件的最近访问时间(浮点型秒数) |
os.path.getctime(path) | 返回path文件的最近修改时间(单位为秒) |
os.path.getsize(path) | 返回文件大小,如果文件不存在就返回错误 |
os.path.isabs(path) | 判断是否为绝对路径 |
os.path.isfile(path) | 判断路径是否为文件 |
os.path.isdir(path) | 判断路径是否为目录 |
os.path.join(path1[,path2[,...]]) | 把目录和文件名合成一个路径 |
os.path.realpath(path) | 返回path的真实路径 |
os.path.split(path) | 把路径分割成dirname和basename,返回形式为元组 |
os.path.splitdrive(path) | 返回驱动器名和路径,返回形式为元组,一般用在Windows下 |
os.path.splitext(path) | 分割路径,返回路径名和文件扩展名,返回形式为元组 |
代码示例:
import os'''当前文件:os.path.py所在目录:C:\auto_test\auto_test_project\api_test\demo'''# 获取当前文件的绝对路径print(os.path.abspath(__file__)) # C:\auto_test\auto_test_project\api_test\demo\os.path.py# 获取指定文件的真实路径print(os.path.realpath('os.path.py')) # C:\auto_test\auto_test_project\api_test\demo\os.path.py# 获取path路径的基本名称print(os.path.basename('os.path.py')) # os.path.py# 获取当前文件所在目录print(os.path.dirname(os.path.abspath(__file__))) # C:\auto_test\auto_test_project\api_test\demoprint(os.path.abspath('.')) # C:\auto_test\auto_test_project\api_test\demo# 获取当前文件所在目录的上一层目录print(os.path.dirname(os.path.abspath('.'))) # C:\auto_test\auto_test_project\api_testprint(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) # C:\auto_test\auto_test_project\api_test# 获取文件大小,不存在会报错print(os.path.getsize('os.path.py')) # 1130path1 = os.path.realpath(__file__)# 判断是否为绝对路径print(os.path.isabs(path1)) # True# 判断路径是否为文件print(os.path.isfile(path1)) # True# 判断路径是否为目录print(os.path.isdir(path1)) # Falsepath2 = os.path.abspath('多线程.py')# 将路径分割成目录和文件名print(os.path.split(path2)) # ('C:\\auto_test\\auto_test_project\\api_test\\demo', '多线程.py')# 将路径分割成驱动器名和路径print(os.path.splitdrive(path2)) # ('C:', '\\auto_test\\auto_test_project\\api_test\\demo\\多线程.py')# 将路径分割成路径名和扩展名print(os.path.splitext(path2)) # ('C:\\auto_test\\auto_test_project\\api_test\\demo\\多线程', '.py')# 获取path所指文件的最近访问时间(浮点型秒数)print(os.path.getatime(path2)) # 1676626725.4052565# 获取path文件的最近修改时间(单位为秒)print(os.path.getctime(path2)) # 1676336754.34521
3.执行系统命令
使用os模块中的system或者popen等方法可以执行操作系统的命令。
方法 | 说明 |
os.system(command) | 运行操作系统命令,直接显示结果。但返回值是0或-1,不能获得显示在屏幕上的数据。 command是要执行的命令字符串。 |
os.popen(command, [mode, [bufsize]]) | 开启一个子进程执行command参数指定的命令,在父进程和子进程之间建立一个管道pipe,用于在父子进程间通信,并通过read()方法将命令的结果返回。 |
代码示例:
import osret1 = os.system('adb shell') # 直接在控制台打印print(ret1) # 成功返回0,失败返回1ret2 = os.popen(cmd='ipconfig') # 执行ipconfig命令(Windows)print(ret2.read()) # 通过read()方法读取返回结果
执行结果如下:
另外,通过subprocess模块的getoutput()方法也可以执行系统命令:
ret3 = subprocess.getoutput('ipconfig')print(ret3)
执行结果如下:
方法 | 说明 |
os.listdir(dir_name) | 遍历目录,不递归,返回一个列表,包含该目录下的所有目录和文件 [目录, 文件] |
os.walk(top,topdown=True,onerror=None) | 遍历目录,递归,函数返回一个元组:(目录名, [目录列表], [文件列表])。三个元素分别是:每次遍历的路径名、路径下子目录列表、目录下文件列表 |
代码示例:
import osdir_name = os.path.dirname(os.path.abspath('.'))print(dir_name) # C:\auto_test\auto_test_project\api_test# 遍历当前目录,不递归,返回一个列表 [目录, 文件]print(os.listdir(dir_name))# 递归遍历当前目录下的所有文件及目录,返回一个三元元祖(目录名, [目录列表], [文件列表])for root, dictionary, files in os.walk(dir_name): print("***遍历所有目录***") for dic in dictionary: print(dic) print("***遍历所有目录下的文件***") for file in files: print(file)
运行结果如下:
同时,也可以将遍历到的文件和目录拼接起来:
# 将遍历的文件或目录和它们所在的目录拼接起来for file in os.listdir(dir_name): print(os.path.join(dir_name, file))
另外,也可以将遍历到的目录和文件写入txt文件:
import os# 声明路径dir_name = os.path.dirname(os.path.abspath('.'))# 将遍历的文件或目录名称写入文件# 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。# 如果该文件不存在,创建新文件。with open(file='files.txt', mode='w ', encoding='utf-8') as f: for file in os.listdir(dir_name): f.write(file)
- 12-27大侦探山东鸡的梗是哪一期 山东鸡什么梗什么意思
- 10-28处女座女生感情运势啥时候能脱单:处女座,10月上旬室女座感情状况分析
- 03-19不知道鼓捣啥呢:也不知道显豁啥呢
- 05-04电脑最好用的管家软件:这几款口碑超棒的软件还你一个清爽的电脑
- 12-10如果孩子早恋怎么和他沟通呢?孩子叛逆,早恋怎么办别急着发火
- 03-09生活不会因为善良而善待你,有时你可以不善良但是你不能
- 12-23婴儿车哄睡法利弊:你知道4S哄睡法吗专门针对0
- 03-08乐视有没有售后服务了:乐视启动24小时快修服务
- 10-19腰椎间盘突出症的前兆是什么?注意腰椎间盘突出的四大前期症状
- 03-27上海区划调整消息:上海市的区划调整四个一线大城市之一
- 09-28asp.netcore三层源码:ASP.NET,CoreBootstrap快速后台开发框架
- 12-11苏州市职业大学排名为什么那么低?苏南引进大学苏北升格学院
- 06-03陕汽德龙的哪一款车最经典:只有10台,售价才42万15L600马力的陕汽德龙你见过吗
- 10-15沈阳工学院是什么档次的学生?沈阳工学院,沈阳名校
- 02-23越南为什么有一个城市叫胡志明市?越南为何定都河内不是胡志明市
- 01-13大的鹦鹉在国内可以有什么品种?其中最贵的可以卖到35万元一只
热门
推荐
- 1母亲节的经典句子176
- 2英国留学:细数四大名校之最|英国留学翻译专业排名及名校推荐249
- 3优美散文短篇364
- 4五年级数学上学期期末模拟试题151
- 5关于丑小鸭英语故事简短270
- 6好习惯伴我成长演讲稿五篇429
- 7在年末岁尾全县安全生产紧急会议上的讲话3211
- 8儿童节快乐的句子集锦463