这是我参与8月更文挑战的第1天,活动详情查看:8月更文挑战
我们在之前已经学习了Python基本数据类型、文件操作。对Python的基本知识有了一定基础了,那我们继续迈向学习的步伐,学习Python常用模块学习,本期我们来看看os模块。
Let's GO~
1. os模块概述
鉴于之前我们已经学习过文件相关的操作,哪我们来捋一捋文件操作有哪些场景:
- 打开文件,我们可以使用Python内置open()函数
- 对单个文件进行删除、移到等操作,我们可以使用os模块对应方法
- 操作文件路径名称,我们可以使用os.path模块相关的方法
- 读取通过命令行得到的所有文件的所有行,我们可以使用fileinput模块
- 创建临时文件和目录,我们可以使用tempfile模块
- 对文件进行高阶操作如拷贝、删除、移动等,我们可以使用shutil模块
本期,我们将进行重点学习os模块
os(operating system)语义为操作系统,python提供os模块方便我们可以对操作系统进行操作。
在操作系统上,我们直接调用操作系统的可执行文件、命令、直接操作文件、目录等等
- os模块提供可以移植的使用操作系统功能的方法,跨平台
- os模块对于文件路径或者文件名的方法时支持字符串和字符串对象,并返回对应类型为结果
- os模块主要的功能:系统相关、目录及文件操作、执行命令和管理进程
当使用无效或者无法访问的文件名与路径,或者操作系统不接受,此模块所有的函数会返回OSError异常
>>> import os
>>> os.chdir("d:\Juejing")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
FileNotFoundError: [WinError 3] 系统找不到指定的路径。: 'd:\\Juejing'
>>>
2. os模块系统相关方法
os模块提供了一些操作系统相关的变量,可以在跨平台的时候提供支持,便于编写移植性高,可用性好的代码。
因此,我们在写涉及到相关操作系统的操作时,尽量使用本模块提供的方法,不要使用当前平台特定的用法和格式,否则移到其他的平台上,会出现各种各样奇怪的问题。
方法 | 作用 |
---|---|
os.name | 查看当前操作系统的名称。windows平台上返回'nt',linux则返回'posix' |
os.environ | 获取系统环境变量 |
os.sep | 当前平台的路径分隔符.在Windows下为'',在Linux下为'/' |
os.alsep | 可替代的路径分隔符,在Windows中未'/' |
os.exsep | 文件名和文件扩展名之间分隔的符号,在Windows下为'.' |
os.pathsep | PATH环境变量中分隔符在Windows下为';'在Linux系统下为':' |
os.linesep | 行结束符。在不同系统中行尾的结束符不同,在Windows下为'\r\n' |
os.devnull | 在不同系统上NULL设备的路径,在Windows下为'null',在Linux下为'/dev/null' |
os.defpath | 当使用exec函数族的时候,如果没有指定PATH环境变量,则默认会查找os。defpath中的值作为子进程PATH的值 |
>>> import os
>>> os.name
'nt'
>>> os.environ
environ({'ALLUSERSPROFILE': 'C:\\ProgramData' })
>>> os.sep
'\\'
>>> os.altsep
'/'
>>> os.pathsep
';'
>>> os.linesep
'\r\n'
>>> os.pathsep
';'
>>> os.linesep
'\r\n'
>>> os.devnull
'nul'
>>> os.defpath
'.;C:\\bin'
>>>
3. os模块文件和目录操作
📃 os模块文件常用操作如下:
方法 | 作用 |
---|---|
os.remove(path) | 删除指定文件 |
os.rename(src,dest) | 重命名文件或者目录 |
os.stat(path) | 返回文件的所有属性 |
os.listdir(path) | 返回path目录下的文件和目录列表 |
>>> os.chdir(r"F:\JueJin")
>>> os.getcwd()
'F:\\JueJin'
>>> os.listdir()
['juejin2.txt']
>>> os.stat(r"F:\juejin")
os.stat_result(st_mode=16895, st_ino=844424930520364, st_dev=1710438242, st_nlink=1, st_uid=0, st_gid=0, st_size=0, st_atime=1627730320, st_mtime=1627730317, st_ctime=1627651260)
>>> os.rename("juejin2.txt","juejin1.txt")
>>> os.listdir()
['juejin1.txt']
>>> os.remove("juejin1.txt")
>>> os.listdir()
[]
📃 os模块目录常用操作如下:
方法 | 作用 |
---|---|
os.mkdir(path) | 创建目录 |
os.makedirs(path1/path2/path3/...) | 创建多及目录 |
os.rmdir(path) | 删除目录 |
os.removedirs(path1/path2...) | 删除多级目录 |
os.getcwd() | 返回当前工作目录,current worke dir |
os.chdir(path) | 把path设为当前工作目录 |
os.walk() | 遍历目录树 |
>>> import os
>>> os.chdir("f:")
>>> os.getcwd()
'F:\\'
>>> os.mkdir("JueJin")
>>> os.listdir()
['$360Honeypot', '$RECYCLE.BIN', 'adb_log', 'code', 'ALL logo']
>>> os.chdir("JueJin")
>>> os.getcwd()
'F:\\JueJin
4. os模块执行命令
os模块可以支持对操作系统进行输入系统命令操作
- os.system(command)
- os.popen(command,[mode,[bufsize]])
os.system(command) 运行操作系统命令,直接显示结果返回值是0或者-1时,不能获得显示在屏幕上的数据。
command是要执行的命令字符串c c
import os
os.system("ping www.juejin.cn") # ping网址
os.system("uname -a") # 查看MAC电脑信息
os.system("cmd") #查看windows命名窗口
os.popen(command,[mode,[bufsize]])
💡 开启一个子进程执行command参数指定的命令,在父进程和子进程之间创建一个管道pipe,用于在父子进程间通信。该方法返回一个文件对象,可以对这个文件对象进行读或写,取决于参数mode,如果mode指定只读,那么只能对文件对象进行读,如果mode指定只写,那么只能对文件对象进行写操作
os.popen("ipconfig")
<os._wrap_close object at 0x000001A883BF8888>
>>> ret = os.popen("ipconfig")
>>> ret.read()
'\nWindows IP 配置\n\n\n以太网适配器 以太网:\n\n
PS: 对于操作系统命令后,system只能看不能存,popenk可以将内容进行存储
总结
本期我们对os模块进行学习,对常用的方法进行基础实操之后,大家感兴趣话可以去阅读os.py文件里对os模块各个方法的讲解。
接下来我们会一起继续学习其他模块如path、shutil的对文件操作细节
以上是本期内容,期待大佬们点赞评论指正♥️♥