Python os模块 | 8月更文挑战

724 阅读5分钟

玩转Python

这是我参与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.pathsepPATH环境变量中分隔符在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的对文件操作细节

以上是本期内容,期待大佬们点赞评论指正♥️♥